Lambda 具有n个参数的curry函数
f:接受n个参数的函数Lambda 具有n个参数的curry函数,lambda,scheme,racket,Lambda,Scheme,Racket,f:接受n个参数的函数 n:正整数>=2 比如说 (curry-n f n) 应该生产12个 我想我理解咖喱的工作原理,对于二进制函数咖喱,我可以做如下的事情 (define (add2 a b c d) (+ 2 a b c d)) (define func (curry-n add2 4)) ((((func 1) 2) 3) 4) 但是我很难在n个参数上概括curry,有什么帮助吗?当然,您使用循环。;-)以下是我的实现: (define (curry-2 f) (lambda(
n:正整数>=2
比如说
(curry-n f n)
应该生产12个
我想我理解咖喱的工作原理,对于二进制函数咖喱,我可以做如下的事情
(define (add2 a b c d) (+ 2 a b c d))
(define func (curry-n add2 4))
((((func 1) 2) 3) 4)
但是我很难在n个参数上概括curry,有什么帮助吗?当然,您使用循环。;-)以下是我的实现:
(define (curry-2 f)
(lambda(x)
(lambda(y)
(f x y)))).
下面是一个更通用的实现,它允许curried函数接受任意数量的参数,而不仅仅是1个:
(define (curry-n f n)
(let loop ((n n) (args '()))
(if (zero? n)
(apply f (reverse args))
(lambda (x)
(loop (- n 1) (cons x args))))))
(
take
和append reverse
都来自于。)当然,您使用了一个循环以下是我的实现:
(define (curry-2 f)
(lambda(x)
(lambda(y)
(f x y)))).
下面是一个更通用的实现,它允许curried函数接受任意数量的参数,而不仅仅是1个:
(define (curry-n f n)
(let loop ((n n) (args '()))
(if (zero? n)
(apply f (reverse args))
(lambda (x)
(loop (- n 1) (cons x args))))))
(take
和append reverse
来自。)