【问题标题】:How to get this Prolog program to work如何让这个 Prolog 程序工作
【发布时间】:2012-03-02 01:19:44
【问题描述】:

我目前正在尝试创建一个程序,它需要两个输入一个基数和一个指数,所以基本上我会要求这两个东西,例如如果 Prolog 的用户输入基数 2 和指数 3,我希望它返回8..,这是我到目前为止得到的,但不起作用:

base:- write('Input the base: '),read(X),expo(X).
exponent:- write('Input the exponent '),read(Y),expo(Y).


expo(X,Y):- A is Y*Y,B is A*X,write(B).

请帮忙

【问题讨论】:

  • Doesn't work 在调试建议中几乎没用; 什么不起作用?你得到什么输出?你期望什么输出?为什么您的 expo(A,B):- 似乎定义了一个带有两个参数的规则,而您的 base:-exponent:- 似乎只使用一个参数来调用它?

标签: prolog logic declarative


【解决方案1】:
  • 您已经定义了expo/2(即带有两个参数的谓词expo),但您正在调用expo/1
  • 您将read/1 调用拆分为不同谓词的方式意味着XY 在不同的范围内;除非您将 read(X)read(Y) 放在同一规则中,否则您将永远无法调用 expo(X,Y)
  • 您的幂定义错误。 X^Y 不是 Y*Y*X。如果您需要自己实现这一点,则需要一个递归谓词来完成它。如果不是,请使用内置的幂运算符X**Y

【讨论】:

    【解决方案2】:

    请参阅this question 了解如何正确实施 pow。对于输入部分,您可能要考虑在您的 pow/ 3 谓词起作用之前不要费心去实现它。要测试这个谓词,你可以同时使用?- pow(2, 3, R).

    Prolog 应该用R = 8. 回答。

    正如前面的回答所说,输入部分是错误的。但是这个先前的答案已经为如何改善这种情况提供了足够的线索,所以我将把它留在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2012-08-27
      相关资源
      最近更新 更多