我对整体计划还是很陌生,在确定学校作业时遇到了一些问题。所以请不要完整的答案,只是寻找一点见解或朝着正确的方向轻推,这样我就可以自己解决这个问题。
问题如下:给定一个数字列表,确定两个子集是否可以从这些相等的总和和项目数组成。例如,如果给定的集合是 (1 1),那么我的程序应该返回 #t,否则返回 #f。
这是我到目前为止所写的(即使它目前没有输出)
(define l (list '(7 5)))
(define s1 0)
(define s2 0)
(define l1 0)
(define l2 0)
(define two-subsets
(lambda (l s1 s2 l1 l2)
(if (null? l)
(if (and (= s1 s2) (= l1 l2))
(#t))
(if (not (and (= s1 s2) (= l1 l2)))
(#f)))
(or ((two-subsets(cdr l) (+ s1 1) s2 (+ l1 1) l2) (two-subsets(cdr l) s1 (+s2 1) l1 (+ l2 1))))))
我的函数应该递归地将项目添加到子集 1 (s1, l1) 或子集 2 (s2, l2),直到它达到确定子集大小和总和是否相等的基本情况。我觉得我的逻辑在那里/关闭,但我不确定如何在方案中正确实施这些想法。
编辑我应该补充一点,作为作业的一部分,我必须使用递归。我希望 DrRacket 提供更多调试信息,因为当我点击运行时它没有给出错误,但也没有输出。