【问题标题】:Prolog :- Error in codeProlog :- 代码错误
【发布时间】:2014-11-15 00:16:19
【问题描述】:

我一直在努力解决问题

? − evalExp(exp(−, exp(∗, 3, 4), exp(/, 2, 3)), N ).
N = 11.333333333333334.

我的代码在 windows 中工作,但在 ubuntu 中不工作。这是我的代码。

evalExp(exp(X,L,R),N):-expr(exp(X,L,R),N).
expr(exp(-,L,R),N):-expr(L,N1),expr(R,N2),N is N1-N2.
expr(exp(+,L,R),N):-expr(L,N1),expr(R,N2),N is N1+N2.
expr(exp(*,L,R),N):-expr(L,N1),expr(R,N2),N is N1*N2.
expr(exp(/,L,R),N):-expr(L,N1),expr(R,N2),N is N1/N2.
expr(exp(**,L,0),N):-N=1.
expr(exp(**,L,R),N):-
   expr(L,N1),expr(R,N2),P is N2-1,expr(exp(**,N1,P),N3),N is N1*N3.
expr(A,N):- N is A.

【问题讨论】:

  • 请您解释一下“不工作”。另外,您使用的是哪个 Prolog 解释器? SWI?

标签: prolog logic


【解决方案1】:

我在代码中看不到您的基本情况。您应该有一个供代码回溯。

【讨论】:

    【解决方案2】:

    你的问题是你的最后一个子句,它在回溯时会尝试评估表达式。 可以通过检查输入值(子句中的 A)是否为​​数字来解决。所以最后一个子句应该是:

    expr(N,N):- number(N).
    

    在处理**的子句中还有一个单例变量,参数为0,它应该是:

    expr(exp(**,_,0),N):-N=1.
    

    【讨论】:

    • 按照你说的做后,我的代码在windows中运行,但在ubuntu中显示为false
    • @ChimedPalden:检查 Ubuntu 代码中的拼写错误。在建议的更改之后,您的代码似乎很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多