你如何在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。
答案 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 = [].