Prolog:处理空案例

时间:2015-02-28 04:15:48

标签: null prolog

你如何在prolog中处理这样的空案例?

以下是代码:

var_name([], []).
var_name([_|[X|_]], X).

我想要的结果,

?- var_name([1,[2,x]],X). 
X = [2,x].

?- var_name([3],X). 
X = [].

但是当我运行代码时,我在实现第二个结果时遇到了问题。它失败并返回false。我似乎无法理解我哪里出错了。我提供了一个谓词,表示当var_name为null时返回null。

1 个答案:

答案 0 :(得分:2)

在Prolog中没有NULL概念。可能是null你的意思是空列表,这不是一回事。第二个结果返回false,因为在传递带有一个元素的列表时没有定义正确的断言,在您的情况[3]中。当您传递空列表var_name([], []).并且[]不是空列表时,请注意[]返回[3]。因此,要处理这种情况,您需要添加此规则

var_name([X],[]).

因此,您的规则应如下所示:

var_name([], []).
var_name([X],[]).
var_name([_|[X|_]], X).

然后会得到你想要的结果

?- var_name([3],X). 
X = [].