0

我正在使用 SWI-Prolog,当我尝试运行我编写的一些谓词时,它们会自动在我的答案末尾加上句号,然后直接进入下一行。虽然有些人要求我自己按 Enter 键或将句号放在那里。为什么是这样?

% range(1,5,X) -> X = [1,2,3,4,5]

range(X, X, [X]).
range(Low, High, [Low | Xs]) :-
    Low =< High,
    Low1 is Low+1,
    range(Low1, High, Xs).

这是我需要“手动”按 Enter 或“。”的示例。最后,如果我按“;”,它也会返回 false。但我不明白为什么它会返回错误。

4

1 回答 1

1

当您按下 时;,您是在告诉 PROLOG 最后一个结果对您来说不够好,它应该回溯到最后一个决策结点并采取另一个分支。;如果没有决策点,Prolog 将不允许您按。在示例函数的情况下,当两个参数相等且两种情况range(X, X, [X]).range(Low, High, [Low | Xs])...都是有效选择时做出决定。您给出的第一个结果将对应于range(X, X, [X]).并将返回[X],这是范围的最后一个元素。如果我们假设原始查询是range(1,2,X),则搜索将以 结束range(2,2,[2]).。但是当你按下;它会去:

range(2, 2, [2|Xs]) ....

这将执行递归查询

range(3, 2, Xs) ....

最终将失败Low =< High 并产生false结果。

于 2015-03-16T16:06:46.580 回答