我目前正在尝试创建一个程序,它接受两个输入一个基数和一个指数,所以基本上我要求这两个东西,例如,如果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).
请帮助
答案 0 :(得分:5)
expo/2
(即带有两个参数的谓词expo
),但您正在调用expo/1
。read/1
次调用分成不同谓词的方式意味着X
和Y
位于不同的范围内;除非您将expo(X,Y)
和read(X)
放在同一规则中,否则您将永远无法致电read(Y)
。X**Y
。答案 1 :(得分:1)
请参阅this question,了解如何正确实施权限。对于输入部分,您可能需要考虑在pow/
3
谓词有效之前不要执行它。要测试此谓词,您可以在此期间使用?- pow(2, 3, R).
。
Prolog应该回答R = 8.
。
正如之前的回答所说,输入部分是错误的。但是之前的回答已经为如何改善这种情况提供了足够的线索,所以我会把它留在那里。