gpt4 book ai didi

scheme - 方案中的 curry

转载 作者:行者123 更新时间:2023-12-02 09:11:29 25 4
gpt4 key购买 nike

我有这个curry函数:

(define curry
(lambda (f) (lambda (a) (lambda (b) (f a b)))))

我认为这就像(define curry (f a b))

我的作业是使用curry编写一个函数consElem2All,其工作原理应该像

(((consElem2All cons) 'b) '((1) (2 3) (4)))
>((b 1) (b 2 3) (b 4))

我以常规方式编写了这个函数:

(define (consElem2All0 x lst) 
(map (lambda (elem) (cons x elem)) lst))

但仍然不知道如何用curry对其进行转换。谁能帮我吗?

提前致谢

熊克

最佳答案

您应该首先阅读有关柯里化(Currying)的内容。如果你不明白 curry 是什么,可能真的很难使用它......在你的例子中,http://www.engr.uconn.edu/~jeffm/Papers/curry.html也许是一个好的开始。

柯里化(Currying)的一个非常常见和有趣的用途是使用像reduce或map这样的函数(对于它们自己或它们的参数)。

让我们定义两个柯里化(Currying)运算符!

(define curry2 (lambda (f) (lambda (arg1) (lambda (arg2) (f arg1 arg2)))))
(define curry3 (lambda (f) (lambda (arg1) (lambda (arg2) (lambda (arg3) (f arg1 arg2 arg3))))))

然后是一些柯里化(Currying)的数学函数:

(define mult (curry2 *))
(define double (mult 2))

(define add (curry2 +))
(define increment (add 1))
(define decrement (add -1))

然后是柯里化(Currying)的reduce/map:

(define creduce (curry3 reduce))
(define cmap (curry2 map))

使用它们

首先减少用例:

(define sum ((creduce +) 0))
(sum '(1 2 3 4)) ; => 10

(define product (creduce * 1))
(product '(1 2 3 4)) ; => 24

然后映射用例:

(define doubles (cmap double))
(doubles '(1 2 3 4)) ; => (2 4 6 8)

(define bump (cmap increment))
(bump '(1 2 3 4)) ; => (2 3 4 5)

我希望能帮助您掌握柯里化(Currying)的用处...

关于scheme - 方案中的 curry ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com