作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法找出将函数柯里化(Currying)指定次数的方法。也就是说,我给函数一个自然数 n 和一个函数 fun,并且它对函数进行柯里化(Currying) 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)))))
如果您使用 Racket,则可以使用 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
关于lambda - 在Scheme中柯里化(Currying)一个函数n次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552597/
我是一名优秀的程序员,十分优秀!