为什么有些prolog谓词'结束'自动,有些人要求我按回车/'。'再次?

时间:2015-03-16 15:41:44

标签: prolog prolog-toplevel

我正在使用SWI-Prolog,当我尝试运行一些我写的谓词时,他们会在我的答案结束时自动完全停止并直接进入下一行。虽然有些人要求我自己输入或者把满座位放在那里。这是为什么?

% 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).

这是我需要手动&#39;要么按回车键,要么按&#39;。&#39;要完成,如果我按下&#39;,它也会返回false。但我不明白为什么它会返回虚假。

1 个答案:

答案 0 :(得分: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结果。