为什么序言中的length / 2谓词可以产生无限数量的长度?

时间:2018-11-09 15:09:30

标签: prolog

当我应用此查询时:

?长度(P,_)。

P = [] ? ;

P = [_] ? ;

P = [_,_] ? ;

P = [_,_,_] ? ;

P = [_,_,_,_] ?

我有那个结果。如何运作?

1 个答案:

答案 0 :(得分:2)

通过选择点。谓词具有多个子句时,大约会创建一个选择点:

length([], 0).
length([_|L], M) :- length(L, N), M is N+1.

然后,这些选择点由Prolog解释器给出不同的推导。这是Tau Prolog sandbox中的派生屏幕截图:

enter image description here

请稍等,我想我需要提出一个issue,此派生屏幕截图显示的内容太多了。合成(=)/ 2和控件(,)/ 2。