在序言中,我有一個計算列表長度的規則。我想知道我的清單是否已預先定義,我該怎麼辦?序言長度預定義列表
例如,在基地我
list1[1,2,3,4,3,5,8].
longueur([],0).
longueur([_|Y],N) :- longueur(Y,M), N is M+1.
而在序言中我進入longueur(list1,N).
我一直歌廳false.
在序言中,我有一個計算列表長度的規則。我想知道我的清單是否已預先定義,我該怎麼辦?序言長度預定義列表
例如,在基地我
list1[1,2,3,4,3,5,8].
longueur([],0).
longueur([_|Y],N) :- longueur(Y,M), N is M+1.
而在序言中我進入longueur(list1,N).
我一直歌廳false.
longueur(list1,N).
是假的,因爲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.
'李st1 [1,2,3,4,3,5,8] .'不正確的語法,特別不意味着'list1 = [1,2,3,4,5,6,7,8]' 。 – Fatalize
但我沒有得到任何錯誤! – bttX
你使用什麼分佈?在SWI-Prolog上,出現以下錯誤,如預期的那樣:'錯誤:c:/test.pl:1:5:語法錯誤:操作員期望'。 – Fatalize