【问题标题】:prolog predicate that adds 2 numbers in successive notation and getting the result in Z also in successive notationprolog 谓词以连续表示法添加 2 个数字并在 Z 中也以连续表示法获得结果
【发布时间】:2021-05-03 02:58:53
【问题描述】:
add(0,Y,Y).
add(s(X),Y,Z):-
     add(X,Y,Z1),
    Z is s(Z1).

为什么总是导致 false 为什么编译器告诉我算术:'s(_2676)' 不是函数

【问题讨论】:

    标签: prolog successor-arithmetics


    【解决方案1】:

    您将谓词调用与复合术语混淆了。您尚未定义 s/1 谓词。所以编译器会抛出一个错误。 is 不是通用赋值,它是一个算术评估器。你应该改用=

    以下应该有效。这里我写s(X)时,这不是谓词调用而是复合词。

    add(0, X, X).
    add(s(X), Y, Z) :- Z = s(Z1), add(X, Y, Z1).
    

    或者这个

    add(0, X, X).
    add(s(X), Y, s(Z)) :- add(X, Y, Z).
    
    ?- add(s(s(s(0))), s(s(0)), X).
    X = s(s(s(s(s(0))))).
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      相关资源
      最近更新 更多