首页 > 解决方案 > 为什么 GNU prolog 中的“重复”不能按预期工作?

问题描述

我尝试在我的 GNU 1.4.5 中运行以下代码。

文件名是 other.pl 我运行它:[other].我运行函数test.

然后我输入一些数字并按回车。它继续到下一行再次输入数字,而不写“请输入数字”。

我很困惑为什么 prolog 不能正确执行重复。

示范:

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

代码:

 test :- repeat, 
                     write('Please enter a number'), 
                     read(X), 
                     (X=:=42).

标签: prolog

解决方案


标准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,
    !.

推荐阅读