curry.lisp
(define-macro curry (lambda (fn) (
(define curry0 (lambda (args body) (
(if (nil? args)
(body)
(
`(lambda ((,(car args))) (,(
curry0 (cdr args) body
)))
))
)))
(if (procedure? (apply fn))
(
(define args (car (cdr fn)))
(define body (cdr (cdr fn)))
(curry0 args body)
)
(fn))
)))
使用
(define add3 (curry(lambda (x y z) (+ x y z))))
(((add3 1) 2) 3)
介绍
这条语句
(curry(lambda (x y z) (+ x y z)))
等价于下面这条语句
(lambda (x) (lambda (y) (lambda (z) ((+ x y z)))))
暂不支持这种写法
(define add30 (lambda (x y z) (+ x y z)))
(define add3 (curry add30))
若想支持可以用宏重写 define 语句
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。