gpt4 book ai didi

lambda - 方案中的 n 元函数

转载 作者:行者123 更新时间:2023-12-01 06:15:08 25 4
gpt4 key购买 nike

我正在为计划中的 CS 类(class)编写作业。我必须基于另一个名为 chili 的函数编写一个 n 元函数,它接受 3 个参数和一个运算符作为输入并返回与运算符组合的变量,如下所示:

> ((((Chili3 +) 1) 10) 100)
111

和代码:

(define Chili3
(lambda (p)
(lambda (x1)
(lambda (x2)
(lambda (x3)
(p x1 x2 x3))))))

我应该编写的函数必须采用另一个输入,它定义了函数将使用的参数数量,并将像这样执行:

> ((((((Curry 5 *) 1) 2) 3) 4) 5)
120

这是我目前的代码:

(define Chili
(lambda (n p)
(lambda(xs)
((p n) xs))))

有人可以帮助我吗,也许只是解释 n 元函数的工作原理,或者我的代码有什么问题?

最佳答案

这是我的看法。

(define (curry-n n proc)
(let curry-n-aux ((n n) (args '()))
(if (zero? n)
(apply proc (reverse args))
(lambda (x)
(curry-n-aux (- n 1) (cons x args))))))

(curry-n 0 (lambda () "hello")) ; ==> "hello"
((curry-n 1 values) "hello") ; ==> "hello"
((((((curry-n 5 *) 1) 2) 3) 4) 5); ==> 120

另一种方法是使用一个特殊的“apply”值来应用:

(define %curry-apply (list 'apply))
(define (curry proc)
(let curry-n-aux ((args '()))
(lambda (x)
(if (eq? x %curry-apply)
(apply proc (reverse args))
(curry-n-aux (cons x args))))))

((curry-n (lambda () "hello")) %curry-apply) ; ==> "hello"
(((curry-n values) "hello") %curry-apply) ; ==> "hello"
(((((((curry-n *) 1) 2) 3) 4) 5) %curry-apply); ==> 120

关于lambda - 方案中的 n 元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30264931/

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