Note:这是对家庭作业的奖励,但我花了太长时间尝试却毫无结果。非常感谢帮助,但我认为没有必要。
Premise:为数字列表生成幂集,但不使用任何辅助函数、显式递归、循环或除cons
, first
, rest
, empty?
, empty
, else
, lambda
, and cond
,同时仅使用一个define
在语言层面上Intermediate Student with Lambda
。幂集的顺序并不重要。
到目前为止我尝试过的:我发现了 Y 组合器和匿名递归,感谢这个帖子 https://stackoverflow.com/questions/8260485/non-recursive-list-function-with-y-combinator(作者有相同的最终目标,但我们有不同的方法,因此他帖子中的信息不能解决我的问题),并且powerset
代码在这个答案 https://stackoverflow.com/a/20623487/849891,我写了以下内容:
(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 组合器仅适用于一个参数,并且combine
需求2.也许我解决这个问题的逻辑或方法有缺陷。我的经验有限lambda
所以我也可能会缺少知识。
我需要什么帮助:有关后续步骤的任何建议,帮助我融入combine
into powerset
,提供正确逻辑/方法的提示/线索,或者解决方案将不胜感激。
提前致谢!