Lambda 在Scheme中对函数执行n次curry

Lambda 在Scheme中对函数执行n次curry,lambda,scheme,currying,Lambda,Scheme,Currying,我很难想出一种方法来将一个函数转换指定的次数。也就是说,我给函数一个自然数n和一个函数fun,它将函数n次转换。例如: (curry n fun) 是功能,可能的应用是: (((((curry 4 +) 1) 2) 3) 4) 这将产生10个 我真的不知道如何正确地实施它。谁能帮我一下吗?谢谢:)您可以通过反复调用curry来编写自己的n-curry过程: (define (n-curry n func) (let loop ([i 1] [acc func]) (if (= i

我很难想出一种方法来将一个函数转换指定的次数。也就是说,我给函数一个自然数n和一个函数fun,它将函数n次转换。例如:

(curry n fun)
是功能,可能的应用是:

(((((curry 4 +) 1) 2) 3) 4)
这将产生10个


我真的不知道如何正确地实施它。谁能帮我一下吗?谢谢:)

您可以通过反复调用
curry
来编写自己的
n-curry
过程:

(define (n-curry n func)
  (let loop ([i 1] [acc func])
    (if (= i n)
        acc
        (loop (add1 i) (curry acc)))))
如果你在拍,可以使用
for/fold
迭代来表达它:

(define (n-curry n func)
  (for/fold ([acc func])
    ([i (in-range (sub1 n))])
    (curry acc)))
无论如何,请像这样使用它:

(((((n-curry 4 +) 1) 2) 3) 4)
=> 10
;;;现在,我们将从以下示例开始概括:

(define (curry n f)
  (if (= n 0)
      (lambda (x) x)
      (lambda (x) (f ((curry (- n 1) f) x)))))
;;;示例:对初始数字10应用11次函数
1+
,结果21:

((curry 11 (lambda (x) (+ x 1))) 10)
((curry 11 (lambda (x) (+ x 1))) 10)