如何定义Scheme过程输入集合生成指定顺序的所有子集列表
调整方案
你现有的实现逻辑是先生成所有不含当前首元素的子集,再追加所有添加了首元素的子集,和你需要的输出顺序逻辑不符,只需要修改子集合并逻辑即可:将原本的两段式追加改为每对(含首元素的子集、原子集)按顺序拼接,用append-map实现即可。
修改后的完整代码如下:
(define (subsets givenList) (if (null? givenList) (list null) (let ((rest (subsets (cdr givenList)))) (append-map (lambda (x) (list (cons (car givenList) x) x)) rest))))
调用(subsets '(a b c ))即可直接得到你要求的结果:'((a b c) (b c) (a c) (c) (a b) (b) (a) ())。
内容的提问来源于stack exchange,提问作者Jackscalibur
相关产品推荐
相关产品推荐

