gpt4 book ai didi

lambda - 在一个函数中生成幂集,没有显式递归,并且只使用 Racket 中最简单的原语

转载 作者:行者123 更新时间:2023-12-04 00:14:43 24 4
gpt4 key购买 nike

注意:这是家庭作业的奖励,但我花了太长时间尝试无济于事。非常感谢您的帮助,但我认为这不是必需的。

前提:为数字列表生成幂集,但不使用任何辅助函数、显式递归、循环或函数/常量,而不是 consfirstrestempty?emptyelselambdacond,而在语言级别 Intermediate Student with Lambda 上仅使用一个 define。幂集的顺序无关紧要。

到目前为止我所做的尝试:感谢 this post,我发现了 Y-combinator 和匿名递归(作者的最终目标相同,但我们有不同的方法,所以他的帖子中的信息不能解决我的问题),以及 this answer 中的 powerset 代码,并且我写了以下内容:

(define (powerset aL)
(((lambda (X)
((lambda (proc)
(proc proc))
(lambda (proc)
(X (lambda (arg)
((proc proc) arg))))))
(lambda (subset)
(lambda (lst)
(cond
[(empty? lst) (list empty)]
[else (combine (first aL) (powerset (rest aL)))])))) aL)

(define (combine a r)
(cond
[(empty? r) empty]
[else (cons (cons a (first r)) (cons (first r) (combine a (rest r))))]))

我正在通过运行来测试这段代码:

(check-expect (powerset '(1 2 3)) 
(list '(1 2 3) '(2 3) '(1 3) '(3) '(1 2) '(2) '(1) '()))

这段代码运行并产生正确的结果,但是,如您所见,我仍然依赖外部辅助函数 combine,我不知道如何将其转换为 lambda 因为据我所知,Y-combinator 仅适用于一个参数,而 combine 需要 2 个。也许我解决此问题的逻辑或方法存在缺陷。我对 lambda 的经验有限,所以我也可能缺少知识。

我需要什么帮助:关于下一步的任何建议,帮助我将 combine 集成到 powerset 中,提供纠正的提示/线索逻辑/方法,或解决方案将不胜感激。

提前致谢!

最佳答案

the Y-combinator only works with one parameter and combine needs 2

任何多参数函数都可以想象成一个单参数函数,返回一个等待下一个参数的 lambda。这个过程称为柯里化(Currying)。例如,如果我们有

(define add (x y)
(+ x y))

我们可以这样调用它

(add 2 2)

足够简单。现在让我们 curry 吧:

(define (add x)
(lambda (y)
(+ x y)))

调用它的语法略有不同,但基本思想相同:

((add 2) 2)

如果您希望任何 lambda 适合 Y 组合器,您可以将相同的概念应用到它。

关于lambda - 在一个函数中生成幂集,没有显式递归,并且只使用 Racket 中最简单的原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64904835/

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