Climb - Property-based dispatch in functional languages [Slides]
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 267 views

 

Statistics

Views

Total Views
267
Views on SlideShare
267
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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 Conclusion2 / 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 d3 / 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 Conclusion10 / 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 Conclusion11 / 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 Conclusion18 / 19 Christopher Chedeau
  • Property Based Dispatch in Functional Languages Questions ? Introduction Olena Properties Lisp Implementation Other Languages Conclusion19 / 19 Christopher Chedeau