Property Based Dispatch in Functional Languages Property Based Dispatch in Functional Introduction Olena Properties Languages Lisp Implementation Other Languages Christopher Chedeau Conclusion LRDE Laboratoire de Recherche et D´ eveloppement d’EPITA 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 Other Languages Specialization (1) � Ö Ö Ö 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 :properties ( :properties ( Conclusion :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 (defmethod fibo (n) Implementation 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
Recommend
More recommend