gpt4 book ai didi

prolog - 序言中列表的总和

转载 作者:行者123 更新时间:2023-12-05 00:00:41 25 4
gpt4 key购买 nike

我正在阅读“序言的艺术”一书,我发现了一个练习,上面写着“定义关系 sum(ListOfIntegers,Sum) 如果 Sum 是 ListOfIntegers 的总和,则不使用任何辅助谓词”。我想出了这个解决方案:

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 但这将是非常程序化的,不幸的是我不太适合在序言中进行这项工作。
有什么想法或建议吗?

最佳答案

你的第一个条款应该读

sum([], 0).

随着这种变化,空洞的 true return 消失了,你只剩下一个问题:第三个子句颠倒了求和的逻辑。它应该是
sum([s(X)|Xs], s(Sum)) :- sum([X|Xs], Sum).

因为 s/1的数量 sum/2 的左参数中的项应该等于正确参数中它们的数量。

关于prolog - 序言中列表的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com