首页 > 解决方案 > 如何在 prolog 谓词中实例化变量

问题描述

list([]) :- !.
list([A|B], X) :- X = X + 1, list(B, X).

我有以下谓词,我希望确定列表的大小。在第二个谓词中,当我最初遇到谓词时, X 未初始化。如何在对其进行递增之前检查 X 是否具有值。

?-list([a,b,c,d,e,f,g],X).

在这种情况下 X 应该返回 7

标签: prologpredicate

解决方案


在声明性范例中,实例化是不可能的(除非您使用 datafact 或类似的东西),因此解决您的问题的一种方法是声明空列表的大小为 0:

list([],0) :- !.
list([A|B], X1) :- list(B, X0), X1 = X0 + 1.

这样,你知道列表L的长度是1+( L尾的长度)


推荐阅读