【问题标题】:Prolog: sum of elements of two lists compared to elements in third listProlog:两个列表中的元素与第三个列表中的元素相比的总和
【发布时间】:2015-10-13 17:33:17
【问题描述】:

我有 3 个列表。前两个列表的元素数量相加并与第三个列表compare(List1,List2,List3) 进行比较。检查前两个列表的总和以查看元素总数是否小于或等于第三个列表中的元素数。这是我目前拥有的。我收到Total is Total+1 的错误。

lessThanEq(List1, List2, List3) :-
   T1 is 0,
   T2 is 0,
   T3 is 0, 
   addUp(List1, T1),
   addUp(List2, T2),
   addUp(List3, T3),
   T1 is T1+T2,
   T1 =< T3.

addUp([Head|Tail], Total) :-
   addUp(Tail, Total1),
   Total is Total1+1.

这是我目前所拥有的。

【问题讨论】:

  • 您不能在谓词子句中重新分配变量值。所以T1 is T1 + T2 总是会失败(T1 不能是它本身加上T2 的值),除非T2 的值恰好为零。

标签: list prolog


【解决方案1】:

您的程序中有一些错误:

第一:
删除 Tx 变量的实例化为零T1 is 0, T2 is 0, T3 is 0,你不需要初始化这个变量,你也不应该在同一规则中的多个条件下实例化同一个变量。结果可能不是预期的。

第二:
使用不同的变量来实例化 T1 和 T2 之和,T4 is T1 + t2, T4 =&lt; T3

最后,您的谓词 addUp/2 需要基本情况​​,用于空列表

addUp([],0).

并替换变量 Head 的最后一个数字 1。您应该将列表的第一个元素添加到尾部的总和中。

addUp([Head | Tail], Total) :-
 addUp(Tail, Total1), Total is Total1 + Head.

最后的节目:

lessThanEq(List1, List2, List3) :-
    addUp(List1,T1),addUp(List2, T2), addUp(List3, T3),
    T4 is T1 + T2, T4 =< T3.

addUp([],0).
addUp([Head | Tail], Total) :-
    addUp(Tail, Total1), Total is Total1 + Head.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多