【发布时间】:2013-12-04 02:13:03
【问题描述】:
我写了一个函数,它已经找到了一个列表的所有子集并且它可以工作。我正在尝试编写第二个函数,在其中获取 N 长度的所有子集,但效果不佳。
这是我的代码:
(define (subset_length_n n lst)
(cond
[(empty? lst) empty]
[else (foldr (lambda (x y) (if (equal? (length y) n) (cons y x) x)) empty (powerset lst))]
))
where (powerset lst) 给出所有子集的列表。 我误解了foldr的目的吗? 我在想该程序将遍历子集列表的每个元素,将长度与 n 进行比较,如果相同则将其放到空列表中,如果不是则忽略它。
但是 (subset_length_n 2 (list 1 2 3)) 在我想要的时候给了我 (list (list 1 2) 1 2 3) (list (list 1 2) (list 1 3) (list 2 3))
提前致谢
【问题讨论】: