【发布时间】:2015-04-18 20:18:03
【问题描述】:
对于这个问题,我有一个称为 powerset 函数的函数
(define (powerset set)
(if (null? set)
'(())
(let ((rest (powerset (cdr set))))
(append (map (lambda (element) (cons (car set) element))
rest)
rest))))
如果从 powerset 函数生成的子集的总和等于作为参数传入的总和,我想使用该函数返回 true。我想我的想法是对的,但我不确定如何实施。我知道这个函数生成的列表应该一次传递给另一个函数 1 子集。在该函数中,我想将子集中的这些值加在一起,看看它们是否等于总和。到目前为止得到了这个,但我知道它错了。
(define (group list sum)
(cond((null? list) #f)
((equal? (apply + (powerset list)) sum)#t)
(else (group((powerset list))sum)) ))
所以我需要一个函数,它调用 powerset 一次并将列表传递给另一个函数,该函数将子集的总和与作为总和传递的值进行比较。
例如,如果我打电话:
(group '(1 2 4 5) 9)
我希望它返回 #t,因为子集 (4, 5) 的总和等于 9。如果您知道如何使用 powerset 并且可以展示解决此问题的示例,我们将不胜感激。
【问题讨论】: