In Scheme, functiile au forma curry (isi asteapta parametrii pe rand) sau uncurry (primeste toti parametrii odata)
In urmatorul exemplu, se realizeaza concatenarea a doua liste folosind functii recursive in forma curry si uncurry:
appendcurry.ss
(define l1 '(1 2 3))
(define l2 '(5 6 7))
(define appendc
(lambda (l1)
(lambda (l2)
( if (null? l1) l2
(cons (car l1) ((appendc (cdr l1)) l2 ) ) ) )
))
(display ((appendc l1) l2))
appenduncurry.ss
(define l1 '(1 2 3))
(define l2 '(5 6 7))
(define appendu
(lambda (l1 l2)
( if (null? l1) l2
(cons (car l1) (appendu (cdr l1) l2 ) ) ) )
)
(display (appendu l1 l2))
Trecerea de la curry la uncurry sau invers a unei functii se face astfel:
(define f (lambda(x y) (+ x y)))
; curry -> uncurry
(define uc
(lambda (f)
( lambda(x)
(lambda(y)
(f x y)
))))
(((uc f ) 2 )3)
(define g (lambda (x)
(lambda (y)
(+ x y))))
; uncurry -> curry
( define cu
(lambda (f)
(lambda (x y)
((f x) y))))
((cu g) 2 3)
Niciun comentariu:
Trimiteți un comentariu