prolog长度预定义列表

时间:2016-11-04 14:41:26

标签: list prolog

在prolog中,我有一个计算列表长度的规则。我想知道我的列表是否已预定义我该怎么办?

例如,在基地我有

list1[1,2,3,4,3,5,8].

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

在prolog中,我输入longueur(list1,N).我会继续false.

1 个答案:

答案 0 :(得分:0)

longueur(list1,N).为false,因为list1不是列表,因此与您编写的longueur/2两个规则中的任何一个都不匹配。

为了让它发挥作用,这就是你要做的:

?- list1(X), longueur(X,L).
X = [1, 2, 3, 4, 3, 5, 8],
L = 7.

如果您希望longueur/2使用list1作为参数,并且list1([1,2,3,4,5,6,7,8]).作为事实,则应创建类似longueur_depuis_atome/2的谓词:

longueur_depuis_atome(A, L) :-
    call(A, X),
    longueur(X, L).

然后:

?- longueur_depuis_atome(list1,L).
L = 7.