【发布时间】:2011-06-30 15:59:14
【问题描述】:
我创建了两个函数来帮助我解决我的Subset sum problem。不过,我似乎遇到了错误。它告诉我我将两个参数传递给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 也很陌生。如果你看到 一种明显的缩短代码的方法, 请随时纠正我。
【问题讨论】:
-
您确实只使用一个参数调用它,即
(cons (car l) (cdr(cdr l)))。 -
回答问题胜于编辑代码。我试图弄清楚程序出了什么问题,后来看到了你的评论。
-
谢谢大家。在这么简单的修复之后我觉得有点傻。递归正在伤害我的大脑(哈哈)。不过,感谢您的宝贵时间。
标签: function syntax scheme subset-sum