如何使这个Prolog程序工作

时间:2012-03-02 01:19:44

标签: prolog logic declarative

我目前正在尝试创建一个程序,它接受两个输入一个基数和一个指数,所以基本上我要求这两个东西,例如,如果Prolog的用户输入base 2和exponent 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).

请帮助

2 个答案:

答案 0 :(得分:5)

  • 您已定义expo/2(即带有两个参数的谓词expo),但您正在调用expo/1
  • read/1次调用分成不同谓词的方式意味着XY位于不同的范围内;除非您将expo(X,Y)read(X)放在同一规则中,否则您将永远无法致电read(Y)
  • 您的取幂定义错误。 X ^ Y不是Y * Y * X.如果你需要自己实现它,你需要一个递归谓词来做到这一点。如果没有,请使用内置的取幂运算符X**Y

答案 1 :(得分:1)

请参阅this question,了解如何正确实施权限。对于输入部分,您可能需要考虑在pow/ 3谓词有效之前不要执行它。要测试此谓词,您可以在此期间使用?- pow(2, 3, R).

Prolog应该回答R = 8.

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