SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
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

Contenu connexe

Plus de 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
 

Plus de 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
 

Dernier

Concept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfConcept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfUmakantAnnand
 
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
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
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
 
MENTAL STATUS EXAMINATION format.docx
MENTAL     STATUS EXAMINATION format.docxMENTAL     STATUS EXAMINATION format.docx
MENTAL STATUS EXAMINATION format.docxPoojaSen20
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application ) Sakshi Ghasle
 
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
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...Marc Dusseiller Dusjagr
 
PSYCHIATRIC History collection FORMAT.pptx
PSYCHIATRIC   History collection FORMAT.pptxPSYCHIATRIC   History collection FORMAT.pptx
PSYCHIATRIC History collection FORMAT.pptxPoojaSen20
 
Introduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher EducationIntroduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher Educationpboyjonauth
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
Micromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of PowdersMicromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of PowdersChitralekhaTherkar
 
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
 

Dernier (20)

Concept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfConcept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.Compdf
 
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
 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
 
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Tilak Nagar Delhi reach out to us at 🔝9953056974🔝
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
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
 
MENTAL STATUS EXAMINATION format.docx
MENTAL     STATUS EXAMINATION format.docxMENTAL     STATUS EXAMINATION format.docx
MENTAL STATUS EXAMINATION format.docx
 
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Bikash Puri  Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Bikash Puri  Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
 
Hybridoma Technology ( Production , Purification , and Application )
Hybridoma Technology  ( Production , Purification , and Application  ) Hybridoma Technology  ( Production , Purification , and Application  )
Hybridoma Technology ( Production , Purification , and Application )
 
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...
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
 
PSYCHIATRIC History collection FORMAT.pptx
PSYCHIATRIC   History collection FORMAT.pptxPSYCHIATRIC   History collection FORMAT.pptx
PSYCHIATRIC History collection FORMAT.pptx
 
Staff of Color (SOC) Retention Efforts DDSD
Staff of Color (SOC) Retention Efforts DDSDStaff of Color (SOC) Retention Efforts DDSD
Staff of Color (SOC) Retention Efforts DDSD
 
Introduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher EducationIntroduction to ArtificiaI Intelligence in Higher Education
Introduction to ArtificiaI Intelligence in Higher Education
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
Micromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of PowdersMicromeritics - Fundamental and Derived Properties of Powders
Micromeritics - Fundamental and Derived Properties of Powders
 
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
 

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