为什么GNU序言中的“重复”无法按预期工作?

时间:2019-03-11 17:44:18

标签: prolog

我尝试在我的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).

1 个答案:

答案 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,
    !.