Property Based Dispatch in Functional Introduction Olena Properties - - PowerPoint PPT Presentation

property based dispatch in functional
SMART_READER_LITE
LIVE PREVIEW

Property Based Dispatch in Functional Introduction Olena Properties - - PowerPoint PPT Presentation

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


slide-1
SLIDE 1

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Property Based Dispatch in Functional Languages

Christopher Chedeau

LRDE Laboratoire de Recherche et D´ eveloppement d’EPITA

January 18, 2012 http://lrde.epita.fr/

1 / 19 Christopher Chedeau

slide-2
SLIDE 2

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

2 / 19 Christopher Chedeau

slide-3
SLIDE 3

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Olena Properties

Type Name Values image dimension any, one d, two d, three d

3 / 19 Christopher Chedeau

slide-4
SLIDE 4

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Shift Algorithm

definition any unique multiple varying Specialization (1)

  • Specialization (2)
  • size

any fixed Specialization (1)

  • Specialization (2)
  • 4 / 19

Christopher Chedeau

slide-5
SLIDE 5

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

C++ Implementation

shift(Window<W>& win, mln dpsite(W)& dp) { // Dispatch on definition property shift (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

slide-6
SLIDE 6

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Shift Algorithm

definition any unique multiple varying Specialization (1) Ö

  • Ö

Ö Specialization (2) Ö Ö

  • Ö

size any fixed Specialization (1) Ö

  • Specialization (2)
  • 6 / 19

Christopher Chedeau

slide-7
SLIDE 7

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-8
SLIDE 8

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-9
SLIDE 9

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-10
SLIDE 10

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Implementation Overview

  • 10 / 19

Christopher Chedeau

slide-11
SLIDE 11

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Fibonacci

(defalgo fibo ((n (lambda (n) (< n 2)))) n)

11 / 19 Christopher Chedeau

slide-12
SLIDE 12

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Fibonacci

(defalgo fibo ((n (lambda (n) (< n 2)))) n) (defun <2 (n) (< n 2)) (defalgo fibo ((n #’<2)) n)

11 / 19 Christopher Chedeau

slide-13
SLIDE 13

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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)

11 / 19 Christopher Chedeau

slide-14
SLIDE 14

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-15
SLIDE 15

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-16
SLIDE 16

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-17
SLIDE 17

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Haskell Pattern Matching

fibo 0 = 0 fibo 1 = 1 fibo n = fibo (n − 1) + fibo (n − 2)

14 / 19 Christopher Chedeau

slide-18
SLIDE 18

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-19
SLIDE 19

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-20
SLIDE 20

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation 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

slide-21
SLIDE 21

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Conclusion

◮ Conclusion 18 / 19 Christopher Chedeau

slide-22
SLIDE 22

Property Based Dispatch in Functional Languages

Introduction Olena Properties Lisp Implementation Other Languages Conclusion

Questions ?

19 / 19 Christopher Chedeau