具有来自两个列表的相同索引的元素总和的Prolog列表

时间:2015-12-06 15:00:33

标签: prolog

我是Prolog的新手,我正在寻找一个关于如何考虑解决这些事情的例子: 我们有两个列表,我们需要一个新的列表,它从元素总和与两个列表中的相同索引相结合。

?-sm([1,2,3,4],[3,4,5,6],X).
 X=[4,6,8,10].

我们应该如何解决这个问题?

1 个答案:

答案 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([],[],[])。