SlideShare a Scribd company logo
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 ELS
Christopher 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 Javascript
Christopher Chedeau
 
Climb – Chaining Operators - Report
Climb – Chaining Operators - ReportClimb – Chaining Operators - Report
Climb – Chaining Operators - Report
Christopher 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

678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf
CarlosHernanMontoyab2
 

Recently uploaded (20)

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
 
UNIT – IV_PCI Complaints: Complaints and evaluation of complaints, Handling o...
UNIT – IV_PCI Complaints: Complaints and evaluation of complaints, Handling o...UNIT – IV_PCI Complaints: Complaints and evaluation of complaints, Handling o...
UNIT – IV_PCI Complaints: Complaints and evaluation of complaints, Handling o...
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
 
50 ĐỀ LUYỆN THI IOE LỚP 9 - NĂM HỌC 2022-2023 (CÓ LINK HÌNH, FILE AUDIO VÀ ĐÁ...
50 ĐỀ LUYỆN THI IOE LỚP 9 - NĂM HỌC 2022-2023 (CÓ LINK HÌNH, FILE AUDIO VÀ ĐÁ...50 ĐỀ LUYỆN THI IOE LỚP 9 - NĂM HỌC 2022-2023 (CÓ LINK HÌNH, FILE AUDIO VÀ ĐÁ...
50 ĐỀ LUYỆN THI IOE LỚP 9 - NĂM HỌC 2022-2023 (CÓ LINK HÌNH, FILE AUDIO VÀ ĐÁ...
 
Home assignment II on Spectroscopy 2024 Answers.pdf
Home assignment II on Spectroscopy 2024 Answers.pdfHome assignment II on Spectroscopy 2024 Answers.pdf
Home assignment II on Spectroscopy 2024 Answers.pdf
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
The Art Pastor's Guide to Sabbath | Steve Thomason
The Art Pastor's Guide to Sabbath | Steve ThomasonThe Art Pastor's Guide to Sabbath | Steve Thomason
The Art Pastor's Guide to Sabbath | Steve Thomason
 
How to Break the cycle of negative Thoughts
How to Break the cycle of negative ThoughtsHow to Break the cycle of negative Thoughts
How to Break the cycle of negative Thoughts
 
Danh sách HSG Bộ môn cấp trường - Cấp THPT.pdf
Danh sách HSG Bộ môn cấp trường - Cấp THPT.pdfDanh sách HSG Bộ môn cấp trường - Cấp THPT.pdf
Danh sách HSG Bộ môn cấp trường - Cấp THPT.pdf
 
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdf
Welcome to TechSoup   New Member Orientation and Q&A (May 2024).pdfWelcome to TechSoup   New Member Orientation and Q&A (May 2024).pdf
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdf
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
Matatag-Curriculum and the 21st Century Skills Presentation.pptx
Matatag-Curriculum and the 21st Century Skills Presentation.pptxMatatag-Curriculum and the 21st Century Skills Presentation.pptx
Matatag-Curriculum and the 21st Century Skills Presentation.pptx
 
Basic_QTL_Marker-assisted_Selection_Sourabh.ppt
Basic_QTL_Marker-assisted_Selection_Sourabh.pptBasic_QTL_Marker-assisted_Selection_Sourabh.ppt
Basic_QTL_Marker-assisted_Selection_Sourabh.ppt
 
678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf678020731-Sumas-y-Restas-Para-Colorear.pdf
678020731-Sumas-y-Restas-Para-Colorear.pdf
 
Palestine last event orientationfvgnh .pptx
Palestine last event orientationfvgnh .pptxPalestine last event orientationfvgnh .pptx
Palestine last event orientationfvgnh .pptx
 
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXXPhrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
Phrasal Verbs.XXXXXXXXXXXXXXXXXXXXXXXXXX
 
Students, digital devices and success - Andreas Schleicher - 27 May 2024..pptx
Students, digital devices and success - Andreas Schleicher - 27 May 2024..pptxStudents, digital devices and success - Andreas Schleicher - 27 May 2024..pptx
Students, digital devices and success - Andreas Schleicher - 27 May 2024..pptx
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
B.ed spl. HI pdusu exam paper-2023-24.pdf
B.ed spl. HI pdusu exam paper-2023-24.pdfB.ed spl. HI pdusu exam paper-2023-24.pdf
B.ed spl. HI pdusu exam paper-2023-24.pdf
 

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