我创建了两个函数来帮助我解决子集总和问题。不过,我似乎遇到了错误。它告诉我,我将两个参数传递给list-sum
. 我已经在这个程序上玩了几个小时了。我想知道是否有人能发现问题。
这是我的list-sum
:
(define list-sum
(lambda(lst)
(cond
((null? lst) 0)
((pair? (car lst))
(+(list-sum (car lst)) (list-sum (cdr lst))))
(else
(+ (car lst) (list-sum (cdr lst)))))))
这是我使用的函数list-sum
:
(define ssum
(lambda (n l)
(cond
((null? l) #f)
((=(-(- n (car l))(list-sum l)) 0) l)
((ssum (cons (car l)) (cdr (cdr l))))
(else (ssum n (cdr l))))))
它告诉我,我用一个参数调用了“compound-procedure #(number) ssum”,并且它需要两个参数。我把它作为(ssum 8 (list 1 3 5 7))
.
我的问题是:
- 我是否正确设置了我的功能?
- 有没有一种更简单的方法可以将我的列表中的数字相加
ssum
? - 我对Scheme也很陌生。如果您看到缩短代码的明显方法,请随时纠正我。