2012-03-02 77 views
-1

我目前正在尝试创建一个程序,需要两个输入的基础和指数,所以基本上即时通讯要求这两个东西,例如,如果Prolog的用户输入基数2和指数3,我想它返回8 ..,这是我走到这一步,并且不工作:如何让这个Prolog程序工作

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). 

帮助请

+4

_Doesn't work_几乎是无用的,因为调试建议去; _what_不起作用?你会得到什么输出?你期望输出什么?为什么你的'expo(A,B):--'似乎定义了一个需要两个参数的规则,但是你的'base:-'和'exponent:-'似乎只用一个参数调用它呢? – sarnold 2012-03-02 01:36:35

回答

5
  • 您已经定义expo/2(即谓语expo有两个参数),但你打电话expo/1
  • 您将read/1调用拆分成不同谓词的方式意味着XY处于不同的范围;除非您将read(X)read(Y)放在同一规则内,否则您将永远无法拨打expo(X,Y)
  • 您的指数定义是错误的。 X^Y不是Y * Y * X。如果你需要自己实现这个,你需要一个递归谓词来实现它。如果不是,请使用内置指数运算符X**Y
1

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

而Prolog应该用R = 8.回答。

正如前面的回答所说,输入部分是错误的。但是,这个以前的答案已经给了足够的关于如何改善这种情况的线索,所以我会留下来。