【问题标题】:How do we add each element of two lists in sequence in Prolog?我们如何在 Prolog 中按顺序添加两个列表的每个元素?
【发布时间】:2019-12-08 15:23:49
【问题描述】:

编写一个 Prolog 谓词 seqadd/3 使得当 X 和 Y 是相同长度的整数列表时 seqadd(X,Y,Z) 成功,并且 Z 是它们的序列和。

【问题讨论】:

    标签: list prolog


    【解决方案1】:

    您想将第一个列表的第一个元素添加到第二个列表的第一个元素,依此类推。正确的? 如果是,那么您可以使用下面的这种方法。

    seqsum([],[],[]).
    seqsum([H|T],[H1|T1],[H2|Z]):- H2 is H+H1 , seqsum(T,T1,Z).
    

    输出

    ?- seqsum([1,2,3],[4,5,6],Z).
       Z = [5,7,9]
       yes
    

    希望这对您有所帮助。

    【讨论】:

    • 您可以/应该将其设为seqsum([], [], []). 以消除额外的错误答案。
    • @WillNess 如果我添加seqsum([],[],[]).,我会得到两次 M=[5,7,9] 的答案。
    • 我们可以通过简单的剪切来消除这种错误。感谢您帮助我获得更好的答案。 seqsum([X],[Y],[Z]):- Z is X+Y , ! .
    • 不需要不剪。 :) 只需 replace 用我写的内容替换您的第一个子句。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 2021-01-21
    相关资源
    最近更新 更多