prolog - 为什么 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).
解决方案
标准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,
!.
推荐阅读
- google-cloud-platform - 如果我只是按照 GCP 的教程进行操作,会不会花钱?
- firebase - Firebase - 您的 Cloud Firestore 数据库有不安全的规则,如何解决?
- c# - 无法安装实体框架 v6.3.0
- python - 在 Raspberry Pi 上使用自定义小部件
- c# - 为什么在评估 OperationCanceledException 时检查 cancelationToken?
- c# - 在 boostrapper (caliburn.micro) 中正确实现 autofac
- linux - 如何配置filebeat从多个linux服务器读取日志文件
- sql-server-2012 - 如何根据 id 组合行并对特定字段求和
- node.js - 在设备上运行示例应用程序时反应本机错误
- javascript - JavaScript Number.toFixed(2) 未按预期四舍五入。这是一个错误吗?