为什么赢了';";重复;在GNU prolog中工作是否如预期?

为什么赢了';";重复;在GNU prolog中工作是否如预期?,prolog,Prolog,我尝试在GNU1.4.5中运行以下代码 文件名为other.pl 我通过:[other]运行它。我通过测试运行函数。 然后我输入一些数字并按enter键。它继续到下一行再次输入数字,但没有写“请输入一个数字” 我不明白为什么prolog不能正确执行repeat 演示: |?- test. Please enter a number1 42 3 ...(keeps allowing me to enter nums) 代码: 标准的read/1谓词读取一个Prolog术语,该术语预期以句

我尝试在GNU1.4.5中运行以下代码

文件名为other.pl 我通过:
[other]运行它。
我通过
测试运行函数。

然后我输入一些数字并按enter键。它继续到下一行再次输入数字,但没有写“请输入一个数字”

我不明白为什么prolog不能正确执行repeat

演示:

|?-  test.
Please enter a number1
42
3
   ...(keeps allowing me to enter nums)
代码:


标准的
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,
    !.
test :-
    repeat, 
        write('Please enter a number'), 
        read(X),
    X =:= 42,
    !.