SlideShare a Scribd company logo
1 of 22
Download to read offline
Property Based Dispatch
                                                                 in Functional Languages




     Property Based Dispatch in Functional                         Introduction

                                                                   Olena Properties
                  Languages                                        Lisp
                                                                   Implementation

                                                                   Other Languages

                                                                   Conclusion
                  Christopher Chedeau
                                 LRDE
          Laboratoire de Recherche et D´veloppement d’EPITA
                                       e


                       January 18, 2012



                 http://lrde.epita.fr/


1 / 19                                                        Christopher Chedeau
Property Based Dispatch
                            in Functional Languages




   Introduction               Introduction

                              Olena Properties

                              Lisp
                              Implementation
   Olena Properties
                              Other Languages

                              Conclusion

   Lisp Implementation


   Other Languages


   Conclusion




2 / 19                   Christopher Chedeau
Property Based Dispatch
                                                       in Functional Languages
 Olena Properties
                                                         Introduction

                                                         Olena Properties

                                                         Lisp
                                                         Implementation

                                                         Other Languages

                                                         Conclusion
      Type Name        Values
     image dimension   any, one d, two d, three d




3 / 19                                              Christopher Chedeau
Property Based Dispatch
                                                               in Functional Languages
 Shift Algorithm
                                                                 Introduction

                                                                 Olena Properties

                                                                 Lisp
                                                                 Implementation

                                                                 Other Languages

                                                                 Conclusion



                                       definition
                              any unique multiple varying
         Specialization (1)
         Specialization (2)

                                            size
                                         any fixed
                    Specialization (1)
                    Specialization (2)
4 / 19                                                      Christopher Chedeau
Property Based Dispatch
                                                                   in Functional Languages
 C++ Implementation
   shift(Window<W>& win, mln dpsite(W)& dp) {                        Introduction

                                                                     Olena Properties
     // Dispatch on definition property
                                                                     Lisp
     shift (mln trait window definition(W)(), exact(win), dp);        Implementation

   }                                                                 Other Languages

                                                                     Conclusion

   shift (trait::window::definition::unique,
          W& win, mln dpsite(W)& dp) {
     /* Specialized implementation (1) */
   }

   shift (trait::window::definition::multiple,
          W& win, mln dpsite(W)& dp) {
     /* Specialized implementation (2) */
   }


5 / 19                                                          Christopher Chedeau
Property Based Dispatch
                                                           in Functional Languages
 Shift Algorithm
                                                             Introduction

                                                             Olena Properties

                                   definition                 Lisp
                                                             Implementation
                          any unique multiple varying
     Specialization (1)   Ö             Ö        Ö           Other Languages


                          Ö     Ö                Ö
                                                             Conclusion
     Specialization (2)

                             size
                          any fixed
     Specialization (1)   Ö
     Specialization (2)




6 / 19                                                  Christopher Chedeau
Property Based Dispatch
                                                                       in Functional Languages
 C++ Implementation
   shift(Window<W>& win, mln dpsite(W)& dp) {                            Introduction

                                                                         Olena Properties
     mlc is not(mln trait window definition(W),
                                                                         Lisp
             trait::window::definition::any)::check();                    Implementation

     mlc is not(mln trait window definition(W),                           Other Languages

             trait::window::definition::varying)::check();                Conclusion



         shift (mln trait window definition(W)(), exact(win), dp);
   }

   shift (trait::window::definition::unique,
          W& win, mln dpsite(W)& dp) {
     mlc is(mln trait window size(W),
              trait::window::size::fixed)::check();
   }


7 / 19                                                              Christopher Chedeau
Property Based Dispatch
                                                        in Functional Languages
 Lisp Implementation
                                                          Introduction

                                                          Olena Properties

                                                          Lisp
                                                          Implementation

                                                          Other Languages
   (defmethod shift (       (defmethod shift (
                                                          Conclusion
     (win window)             (win window)
     (dp dpsite))             (dp dpsite))
     ; Specialization (1)     ; Specialization (2)
   )                        )




8 / 19                                               Christopher Chedeau
Property Based Dispatch
                                                                 in Functional Languages
 Lisp Implementation
                                                                   Introduction

                                                                   Olena Properties

                                                                   Lisp
   (defalgo shift (            (defalgo shift (                    Implementation

     (win                        (win                              Other Languages

                                                                   Conclusion
        :properties (               :properties (
          :definition :unique          :definition :multiple)
          :size :fixed)              window)
        window)                  (dp dpsite))
     (dp dpsite))                ; Specialization (2)
     ; Specialization (1)      )
   )




9 / 19                                                        Christopher Chedeau
Property Based Dispatch
                               in Functional Languages
  Implementation Overview
                                 Introduction

                                 Olena Properties

                                 Lisp
                                 Implementation

                                 Other Languages

                                 Conclusion




10 / 19                     Christopher Chedeau
Property Based Dispatch
                                    in Functional Languages
  Fibonacci
                                      Introduction

                                      Olena Properties
    (defalgo fibo ((n
                                      Lisp
        (lambda (n) (< n 2))))        Implementation

      n)                              Other Languages

                                      Conclusion




11 / 19                          Christopher Chedeau
Property Based Dispatch
                                    in Functional Languages
  Fibonacci
                                      Introduction

                                      Olena Properties
    (defalgo fibo ((n
                                      Lisp
        (lambda (n) (< n 2))))        Implementation

      n)                              Other Languages

                                      Conclusion



    (defun <2 (n) (< n 2))
    (defalgo fibo ((n #’<2))
      n)




11 / 19                          Christopher Chedeau
Property Based Dispatch
                                                                in Functional Languages
  Fibonacci
                                                                  Introduction

                                                                  Olena Properties
    (defalgo fibo ((n             (defun is (a)
                                                                  Lisp
        (lambda (n) (< n 2))))     (lambda (b)                    Implementation

      n)                              (eq a b)))                  Other Languages

                                                                  Conclusion

                                 (defalgo fibo ((n (is 0)))
    (defun <2 (n) (< n 2))         0)
    (defalgo fibo ((n #’<2))      (defalgo fibo ((n (is 1)))
      n)                           1)




11 / 19                                                      Christopher Chedeau
Property Based Dispatch
                                                                in Functional Languages
  Fibonacci
                                                                  Introduction

                                                                  Olena Properties
    (defalgo fibo ((n             (defun is (a)
                                                                  Lisp
        (lambda (n) (< n 2))))     (lambda (b)                    Implementation

      n)                              (eq a b)))                  Other Languages

                                                                  Conclusion

                                 (defalgo fibo ((n (is 0)))
    (defun <2 (n) (< n 2))         0)
    (defalgo fibo ((n #’<2))      (defalgo fibo ((n (is 1)))
      n)                           1)


    (defalgo fibo (n)
      (+ (fibo (− n 2)) (fibo (− n 1))))



11 / 19                                                      Christopher Chedeau
Property Based Dispatch
                                          in Functional Languages
  Javascript Full Dispatch
                                            Introduction

                                            Olena Properties

                                            Lisp
                                            Implementation
    fibo = FullDispatch()                    Other Languages

                                            Conclusion
    fibo.add [(n) −> n < 2],
      (n) −> n

    fibo.add [null],
      (n) −> fibo(n − 1) + fibo(n − 2)




12 / 19                                Christopher Chedeau
Property Based Dispatch
                                            in Functional Languages
  Python Decorators
                                              Introduction

                                              Olena Properties

                                              Lisp
                                              Implementation
    @dispatch(inside(0, 1))                   Other Languages
    def fibo(n):                               Conclusion
        return n

    @dispatch(int)
    def fibo(n):
        return fibo(n − 1) + fibo(n − 2)




13 / 19                                  Christopher Chedeau
Property Based Dispatch
                                           in Functional Languages
  Haskell Pattern Matching
                                             Introduction

                                             Olena Properties

                                             Lisp
                                             Implementation

                                             Other Languages

                                             Conclusion
    fibo 0 = 0
    fibo 1 = 1
    fibo n = fibo (n − 1) + fibo (n − 2)




14 / 19                                 Christopher Chedeau
Property Based Dispatch
                                            in Functional Languages
  MOP
                                              Introduction

                                              Olena Properties

                                              Lisp
                                              Implementation
    (defmethod fibo (n)
                                              Other Languages
      (+ (fibo (− n 1)) (fibo (− n 2))))
                                              Conclusion


    (defmethod fibo ((n (eql 1)))
      n)

    (defmethod fibo ((n (eql 0)))
      n)




15 / 19                                  Christopher Chedeau
Property Based Dispatch
                                                                 in Functional Languages
  Filtered Dispatch
                                                                   Introduction

                                                                   Olena Properties

    (defun state (n)                                               Lisp
                                                                   Implementation
      (if (< n 2)
                                                                   Other Languages
         ’terminal                                                 Conclusion
         ’general))

    (defmethod fibo :filter :state ((n (eql ’terminal)))
      n)

    (defmethod factorial :filter :state ((n (eql ’general)))
      (+ (fibo (− n 1)) (fibo (− n 2))))




16 / 19                                                       Christopher Chedeau
Property Based Dispatch
                                             in Functional Languages
  Multimethod.js
                                               Introduction

                                               Olena Properties

                                               Lisp
    fibo = multimethod()                        Implementation

      .dispatch((n) −> if n < 2                Other Languages

           ’terminal’                          Conclusion

        else
           ’general’)
      .when(’terminal’,
        (n) −> n)
      .when(’general’,
        (n) −> fibo(n − 1) + fibo(n − 2))




17 / 19                                   Christopher Chedeau
Property Based Dispatch
                          in Functional Languages
  Conclusion
                            Introduction

                            Olena Properties

                            Lisp
                            Implementation

                            Other Languages

                            Conclusion


          Conclusion




18 / 19                Christopher Chedeau
Property Based Dispatch
                   in Functional Languages
  Questions ?
                     Introduction

                     Olena Properties

                     Lisp
                     Implementation

                     Other Languages

                     Conclusion




19 / 19         Christopher Chedeau

More Related Content

More from Christopher Chedeau

Generic Image Processing With Climb – 5th ELS
Generic Image Processing With Climb – 5th ELSGeneric Image Processing With Climb – 5th ELS
Generic Image Processing With Climb – 5th ELSChristopher Chedeau
 
Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]Christopher Chedeau
 
JSPP: Morphing C++ into Javascript
JSPP: Morphing C++ into JavascriptJSPP: Morphing C++ into Javascript
JSPP: Morphing C++ into JavascriptChristopher Chedeau
 
Climb – Chaining Operators - Report
Climb – Chaining Operators - ReportClimb – Chaining Operators - Report
Climb – Chaining Operators - ReportChristopher Chedeau
 
Climb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image ProcessingClimb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image ProcessingChristopher Chedeau
 
Climb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image ProcessingClimb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image ProcessingChristopher Chedeau
 

More from Christopher Chedeau (9)

Generic Image Processing With Climb – 5th ELS
Generic Image Processing With Climb – 5th ELSGeneric Image Processing With Climb – 5th ELS
Generic Image Processing With Climb – 5th ELS
 
Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]Climb - Property-based dispatch in functional languages [Report]
Climb - Property-based dispatch in functional languages [Report]
 
JSPP: Morphing C++ into Javascript
JSPP: Morphing C++ into JavascriptJSPP: Morphing C++ into Javascript
JSPP: Morphing C++ into Javascript
 
J
JJ
J
 
Morpho math
Morpho mathMorpho math
Morpho math
 
Slides
SlidesSlides
Slides
 
Climb – Chaining Operators - Report
Climb – Chaining Operators - ReportClimb – Chaining Operators - Report
Climb – Chaining Operators - Report
 
Climb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image ProcessingClimb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image Processing
 
Climb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image ProcessingClimb - A Generic and Dynamic Approach to Image Processing
Climb - A Generic and Dynamic Approach to Image Processing
 

Recently uploaded

Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptxVS Mahajan Coaching Centre
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxSayali Powar
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajanpragatimahajan3
 
The byproduct of sericulture in different industries.pptx
The byproduct of sericulture in different industries.pptxThe byproduct of sericulture in different industries.pptx
The byproduct of sericulture in different industries.pptxShobhayan Kirtania
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 

Recently uploaded (20)

Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajan
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
The byproduct of sericulture in different industries.pptx
The byproduct of sericulture in different industries.pptxThe byproduct of sericulture in different industries.pptx
The byproduct of sericulture in different industries.pptx
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 

Climb - Property-based dispatch in functional languages [Slides]

  • 1. Property Based Dispatch in Functional Languages Property Based Dispatch in Functional Introduction Olena Properties Languages Lisp Implementation Other Languages Conclusion Christopher Chedeau LRDE Laboratoire de Recherche et D´veloppement d’EPITA e January 18, 2012 http://lrde.epita.fr/ 1 / 19 Christopher Chedeau
  • 2. Property Based Dispatch in Functional Languages Introduction Introduction Olena Properties Lisp Implementation Olena Properties Other Languages Conclusion Lisp Implementation Other Languages Conclusion 2 / 19 Christopher Chedeau
  • 3. Property Based Dispatch in Functional Languages Olena Properties Introduction Olena Properties Lisp Implementation Other Languages Conclusion Type Name Values image dimension any, one d, two d, three d 3 / 19 Christopher Chedeau
  • 4. Property Based Dispatch in Functional Languages Shift Algorithm Introduction Olena Properties Lisp Implementation Other Languages Conclusion definition any unique multiple varying Specialization (1) Specialization (2) size any fixed Specialization (1) Specialization (2) 4 / 19 Christopher Chedeau
  • 5. Property Based Dispatch in Functional Languages C++ Implementation shift(Window<W>& win, mln dpsite(W)& dp) { Introduction Olena Properties // Dispatch on definition property Lisp shift (mln trait window definition(W)(), exact(win), dp); Implementation } Other Languages Conclusion shift (trait::window::definition::unique, W& win, mln dpsite(W)& dp) { /* Specialized implementation (1) */ } shift (trait::window::definition::multiple, W& win, mln dpsite(W)& dp) { /* Specialized implementation (2) */ } 5 / 19 Christopher Chedeau
  • 6. Property Based Dispatch in Functional Languages Shift Algorithm Introduction Olena Properties definition Lisp Implementation any unique multiple varying Specialization (1) Ö Ö Ö Other Languages Ö Ö Ö Conclusion Specialization (2) size any fixed Specialization (1) Ö Specialization (2) 6 / 19 Christopher Chedeau
  • 7. Property Based Dispatch in Functional Languages C++ Implementation shift(Window<W>& win, mln dpsite(W)& dp) { Introduction Olena Properties mlc is not(mln trait window definition(W), Lisp trait::window::definition::any)::check(); Implementation mlc is not(mln trait window definition(W), Other Languages trait::window::definition::varying)::check(); Conclusion shift (mln trait window definition(W)(), exact(win), dp); } shift (trait::window::definition::unique, W& win, mln dpsite(W)& dp) { mlc is(mln trait window size(W), trait::window::size::fixed)::check(); } 7 / 19 Christopher Chedeau
  • 8. Property Based Dispatch in Functional Languages Lisp Implementation Introduction Olena Properties Lisp Implementation Other Languages (defmethod shift ( (defmethod shift ( Conclusion (win window) (win window) (dp dpsite)) (dp dpsite)) ; Specialization (1) ; Specialization (2) ) ) 8 / 19 Christopher Chedeau
  • 9. Property Based Dispatch in Functional Languages Lisp Implementation Introduction Olena Properties Lisp (defalgo shift ( (defalgo shift ( Implementation (win (win Other Languages Conclusion :properties ( :properties ( :definition :unique :definition :multiple) :size :fixed) window) window) (dp dpsite)) (dp dpsite)) ; Specialization (2) ; Specialization (1) ) ) 9 / 19 Christopher Chedeau
  • 10. Property Based Dispatch in Functional Languages Implementation Overview Introduction Olena Properties Lisp Implementation Other Languages Conclusion 10 / 19 Christopher Chedeau
  • 11. Property Based Dispatch in Functional Languages Fibonacci Introduction Olena Properties (defalgo fibo ((n Lisp (lambda (n) (< n 2)))) Implementation n) Other Languages Conclusion 11 / 19 Christopher Chedeau
  • 12. Property Based Dispatch in Functional Languages Fibonacci Introduction Olena Properties (defalgo fibo ((n Lisp (lambda (n) (< n 2)))) Implementation n) Other Languages Conclusion (defun <2 (n) (< n 2)) (defalgo fibo ((n #’<2)) n) 11 / 19 Christopher Chedeau
  • 13. Property Based Dispatch in Functional Languages Fibonacci Introduction Olena Properties (defalgo fibo ((n (defun is (a) Lisp (lambda (n) (< n 2)))) (lambda (b) Implementation n) (eq a b))) Other Languages Conclusion (defalgo fibo ((n (is 0))) (defun <2 (n) (< n 2)) 0) (defalgo fibo ((n #’<2)) (defalgo fibo ((n (is 1))) n) 1) 11 / 19 Christopher Chedeau
  • 14. Property Based Dispatch in Functional Languages Fibonacci Introduction Olena Properties (defalgo fibo ((n (defun is (a) Lisp (lambda (n) (< n 2)))) (lambda (b) Implementation n) (eq a b))) Other Languages Conclusion (defalgo fibo ((n (is 0))) (defun <2 (n) (< n 2)) 0) (defalgo fibo ((n #’<2)) (defalgo fibo ((n (is 1))) n) 1) (defalgo fibo (n) (+ (fibo (− n 2)) (fibo (− n 1)))) 11 / 19 Christopher Chedeau
  • 15. Property Based Dispatch in Functional Languages Javascript Full Dispatch Introduction Olena Properties Lisp Implementation fibo = FullDispatch() Other Languages Conclusion fibo.add [(n) −> n < 2], (n) −> n fibo.add [null], (n) −> fibo(n − 1) + fibo(n − 2) 12 / 19 Christopher Chedeau
  • 16. Property Based Dispatch in Functional Languages Python Decorators Introduction Olena Properties Lisp Implementation @dispatch(inside(0, 1)) Other Languages def fibo(n): Conclusion return n @dispatch(int) def fibo(n): return fibo(n − 1) + fibo(n − 2) 13 / 19 Christopher Chedeau
  • 17. Property Based Dispatch in Functional Languages Haskell Pattern Matching Introduction Olena Properties Lisp Implementation Other Languages Conclusion fibo 0 = 0 fibo 1 = 1 fibo n = fibo (n − 1) + fibo (n − 2) 14 / 19 Christopher Chedeau
  • 18. Property Based Dispatch in Functional Languages MOP Introduction Olena Properties Lisp Implementation (defmethod fibo (n) Other Languages (+ (fibo (− n 1)) (fibo (− n 2)))) Conclusion (defmethod fibo ((n (eql 1))) n) (defmethod fibo ((n (eql 0))) n) 15 / 19 Christopher Chedeau
  • 19. Property Based Dispatch in Functional Languages Filtered Dispatch Introduction Olena Properties (defun state (n) Lisp Implementation (if (< n 2) Other Languages ’terminal Conclusion ’general)) (defmethod fibo :filter :state ((n (eql ’terminal))) n) (defmethod factorial :filter :state ((n (eql ’general))) (+ (fibo (− n 1)) (fibo (− n 2)))) 16 / 19 Christopher Chedeau
  • 20. Property Based Dispatch in Functional Languages Multimethod.js Introduction Olena Properties Lisp fibo = multimethod() Implementation .dispatch((n) −> if n < 2 Other Languages ’terminal’ Conclusion else ’general’) .when(’terminal’, (n) −> n) .when(’general’, (n) −> fibo(n − 1) + fibo(n − 2)) 17 / 19 Christopher Chedeau
  • 21. Property Based Dispatch in Functional Languages Conclusion Introduction Olena Properties Lisp Implementation Other Languages Conclusion Conclusion 18 / 19 Christopher Chedeau
  • 22. Property Based Dispatch in Functional Languages Questions ? Introduction Olena Properties Lisp Implementation Other Languages Conclusion 19 / 19 Christopher Chedeau