Prolog将如何回应以下查询?同时绘制一个搜索树来表示此查询。
?- member(2, [2, a, X]).
首先,这个问题是什么意思?
让我们来看一个更清晰的例子:
?- member(vincent,[yolanda,trudy,vincent,jules]).
Prolog会检查列表中是否包含vincent
。它逐一检查,因此它首先比较vincent
和yolanda
。没有匹配,现在递归规则,也就是进入第二个子句。现在看起来像这样:
?- member(vincent,[trudy,vincent,jules]).
vincent
和trudy
,不匹配。递归规则:
?- member(vincent,[vincent,jules]).
vincent
和vincent
匹配!所以返回true
。
回到我们的例子。Prolog会立即返回true
,因为2
在列表中(即它的头部)。
但搜索树会是什么样子呢?我真的不知道,而且我担心他们会要求我在测试中画出一个搜索树...