我是Prolog的新手,我正在寻找一个关于如何考虑解决这些事情的例子: 我们有两个列表,我们需要一个新的列表,它从元素总和与两个列表中的相同索引相结合。
?-sm([1,2,3,4],[3,4,5,6],X).
X=[4,6,8,10].
我们应该如何解决这个问题?
答案 0 :(得分:2)
使用简单链接列表(使用任何语言)的唯一合适方法是首先处理头部,然后处理其余部分。
所以我们只需占用每个列表的头部,处理它们,然后继续(操作结果使得结果列表的其余部分成为头部)。
在prolog中,这表达为:
sm([],[],[]). % we reached the end
sm([Head1|Rest1],[Head2|Rest2],[ResultHead|RestResult]) :-
ResultHead is Head1 + Head2, % '=' unifies, 'is' computes !!!
sm(Rest1,Rest2,RestResult).
我现在保持简单 - 我看到这个解决方案至少有两个问题,让我们以交互方式发现它们并扩展答案; - )
编辑:sm([],[])。当然是错的(不同的arity =>不同的谓词)。
更正为sm([],[],[])。