【发布时间】:2012-03-14 18:46:20
【问题描述】:
我正在阅读“序言的艺术”一书,我发现了一个练习,上面写着“定义关系 sum(ListOfIntegers,Sum) 如果 Sum 是 ListOfIntegers 的总和,则不使用任何辅助谓词”。I想出了这个解决方案:
sum([],Sum).
sum([0|Xs], Sum):-sum(Xs, Sum).
sum([s(X)|Xs], Sum):-sum([X|Xs],s(Sum)).
这并不能完全按照我的意愿工作。
?- sum([s(s(0)),s(0),s(s(s(0)))],X).
true ;
false.
我期待 X 是
s(s(s(s(s(s(0))))))
我认为问题在于我必须在第一次“迭代”中将 Sum 初始化为 0,但这将是非常程序化的,不幸的是我不太适合在 prolog 中完成这项工作。 有什么想法或建议吗?
【问题讨论】:
标签: prolog successor-arithmetics