Lambda 具有n个参数的curry函数

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(

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(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
来自。)