1
我正在寫一個名爲subseq的函數,它檢查一個列表是否是另一個列表的子序列。prolog實例化錯誤= =運算符
subseq([],[]).
subseq([],[Y|Ys]).
subseq([X|Xs],[Y|Ys]) :- X=:=Y, subseq(Xs,Ys).
subseq([X|Xs],[Y|Ys]) :- X=\=Y, subseq([X|Xs],Ys).
當我嘗試SUBSEQ(X,[1,2])我得到:
X = [] ? ;
uncaught exception: error(instantiation_error,(=:=)/2)
這究竟是爲什麼?我的猜測是[=]正在通過=:=進行操作,但是如何檢查/防止此錯誤?
大部分Prolog系統提供DIF/2,你可以代替(\ =)/ 2使用。不過,我不會稱這個謂詞爲subq/2。 – false 2011-06-01 22:48:22