我尝试在我的GNU 1.4.5中运行以下代码。
文件名是other.pl
我通过以下方式运行它:[other].
我通过test.
来运行功能
然后输入一些数字,然后按Enter键。继续到下一行以再次输入数字,而无需输入“请输入数字”。
我很困惑为什么序言无法正确执行。
演示:
|?- test.
Please enter a number1
42
3
...(keeps allowing me to enter nums)
代码:
test :- repeat,
write('Please enter a number'),
read(X),
(X=:=42).
答案 0 :(得分:3)
标准read/1
谓词读取Prolog术语,该术语以句点(.
)结尾。例如:
| ?- test.
Please enter a number3.
Please enter a number42.
true ?
此外,请注意上面的内容,当我们输入期望的数字时,GNU Prolog正在询问我们是否希望它通过显示true ?
来寻找替代证明。发生这种情况的原因是每次调用repeat/0
都会创建选择点。使用基于repeat/0
的循环时,应始终在测试后添加切割。在样式方面,还建议缩进循环的主体。在这种情况下:
test :-
repeat,
write('Please enter a number'),
read(X),
X =:= 42,
!.