climb - property-based dispatch in functional languages [slides]
DESCRIPTION
TRANSCRIPT
![Page 1: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/1.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Property Based Dispatch in Functional
Languages
Christopher Chedeau
LRDELaboratoire de Recherche et Developpement d’EPITA
January 18, 2012
http://lrde.epita.fr/
1 / 19 Christopher Chedeau
![Page 2: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/2.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Introduction
Olena Properties
Lisp Implementation
Other Languages
Conclusion
2 / 19 Christopher Chedeau
![Page 3: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/3.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Olena Properties
Type Name Valuesimage dimension any, one d, two d, three d
3 / 19 Christopher Chedeau
![Page 4: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/4.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Shift Algorithm
definitionany unique multiple varying
Specialization (1) XSpecialization (2) X
sizeany fixed
Specialization (1) XSpecialization (2) X X
4 / 19 Christopher Chedeau
![Page 5: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/5.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
C++ Implementation
shift(Window<W>& win, mln dpsite(W)& dp) {// Dispatch on definition propertyshift (mln trait window definition(W)(), exact(win), dp);}
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
![Page 6: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/6.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Shift Algorithm
definitionany unique multiple varying
Specialization (1) Ö X Ö Ö
Specialization (2) Ö Ö X Ö
sizeany fixed
Specialization (1) Ö XSpecialization (2) X X
6 / 19 Christopher Chedeau
![Page 7: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/7.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
C++ Implementation
shift(Window<W>& win, mln dpsite(W)& dp) {mlc is not(mln trait window definition(W),
trait::window::definition::any)::check();mlc is not(mln trait window definition(W),
trait::window::definition::varying)::check();
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
![Page 8: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/8.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Lisp Implementation
(defmethod shift ((win window)(dp dpsite)); Specialization (1)
)
(defmethod shift ((win window)(dp dpsite)); Specialization (2)
)
8 / 19 Christopher Chedeau
![Page 9: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/9.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Lisp Implementation
(defalgo shift ((win
:properties (:definition :unique:size :fixed)
window)(dp dpsite)); Specialization (1)
)
(defalgo shift ((win
:properties (:definition :multiple)
window)(dp dpsite)); Specialization (2)
)
9 / 19 Christopher Chedeau
![Page 10: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/10.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Implementation Overview
10 / 19 Christopher Chedeau
![Page 11: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/11.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Fibonacci
(defalgo fibo ((n(lambda (n) (< n 2))))
n)
(defun <2 (n) (< n 2))(defalgo fibo ((n #’<2))
n)
(defun is (a)(lambda (b)
(eq a b)))
(defalgo fibo ((n (is 0)))0)
(defalgo fibo ((n (is 1)))1)
(defalgo fibo (n)(+ (fibo (− n 2)) (fibo (− n 1))))
11 / 19 Christopher Chedeau
![Page 12: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/12.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Fibonacci
(defalgo fibo ((n(lambda (n) (< n 2))))
n)
(defun <2 (n) (< n 2))(defalgo fibo ((n #’<2))
n)
(defun is (a)(lambda (b)
(eq a b)))
(defalgo fibo ((n (is 0)))0)
(defalgo fibo ((n (is 1)))1)
(defalgo fibo (n)(+ (fibo (− n 2)) (fibo (− n 1))))
11 / 19 Christopher Chedeau
![Page 13: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/13.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Fibonacci
(defalgo fibo ((n(lambda (n) (< n 2))))
n)
(defun <2 (n) (< n 2))(defalgo fibo ((n #’<2))
n)
(defun is (a)(lambda (b)
(eq a b)))
(defalgo fibo ((n (is 0)))0)
(defalgo fibo ((n (is 1)))1)
(defalgo fibo (n)(+ (fibo (− n 2)) (fibo (− n 1))))
11 / 19 Christopher Chedeau
![Page 14: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/14.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Fibonacci
(defalgo fibo ((n(lambda (n) (< n 2))))
n)
(defun <2 (n) (< n 2))(defalgo fibo ((n #’<2))
n)
(defun is (a)(lambda (b)
(eq a b)))
(defalgo fibo ((n (is 0)))0)
(defalgo fibo ((n (is 1)))1)
(defalgo fibo (n)(+ (fibo (− n 2)) (fibo (− n 1))))
11 / 19 Christopher Chedeau
![Page 15: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/15.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Javascript Full Dispatch
fibo = FullDispatch()
fibo.add [(n) −> n < 2],(n) −> n
fibo.add [null],(n) −> fibo(n − 1) + fibo(n − 2)
12 / 19 Christopher Chedeau
![Page 16: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/16.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Python Decorators
@dispatch(inside(0, 1))def fibo(n):
return n
@dispatch(int)def fibo(n):
return fibo(n − 1) + fibo(n − 2)
13 / 19 Christopher Chedeau
![Page 17: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/17.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Haskell Pattern Matching
fibo 0 = 0fibo 1 = 1fibo n = fibo (n − 1) + fibo (n − 2)
14 / 19 Christopher Chedeau
![Page 18: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/18.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
MOP
(defmethod fibo (n)(+ (fibo (− n 1)) (fibo (− n 2))))
(defmethod fibo ((n (eql 1)))n)
(defmethod fibo ((n (eql 0)))n)
15 / 19 Christopher Chedeau
![Page 19: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/19.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Filtered Dispatch
(defun state (n)(if (< n 2)
’terminal’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
![Page 20: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/20.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Multimethod.js
fibo = multimethod().dispatch((n) −> if n < 2
’terminal’else
’general’).when(’terminal’,
(n) −> n).when(’general’,
(n) −> fibo(n − 1) + fibo(n − 2))
17 / 19 Christopher Chedeau
![Page 21: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/21.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Conclusion
I Conclusion
18 / 19 Christopher Chedeau
![Page 22: Climb - Property-based dispatch in functional languages [Slides]](https://reader038.vdocuments.us/reader038/viewer/2022103014/549fae71ac795924768b4a32/html5/thumbnails/22.jpg)
Property Based Dispatchin Functional Languages
Introduction
Olena Properties
LispImplementation
Other Languages
Conclusion
Questions ?
19 / 19 Christopher Chedeau