0
我必須爲大學做一個Prolog作業,而且我大部分都完成了,但是我一直在輸出中得到一個_G
變量。Prolog輸出中不需要的邏輯變量
我們需要一個列表進行比較 - L
- 到正規的名詞 - K
- ,並且,如果在列表中的項目比大項,將其添加到另一個列表 - R
- 。
這是我的代碼
teilliste_grK([],0,[]).
teilliste_grK([],_,[_]).
teilliste_grK([H|T],K,L) :-
( H > K
-> L = [H|R],
teilliste_grK(T,K,R)
; L = R,
teilliste_grK(T,K,R)
).
?- teilliste_grK([12,4,1,34,5,45],9,R).
它的工作原理,但不是R = [12,34,45]
我得到R = [12,34,45, _Gxxx]
。我只是不知道爲什麼。
檢查你的事實'teilliste_grK([],_,[_])'。這是什麼意思,語義? '_Gxxx'來自'_'。 – lurker
我將它編輯爲'teilliste_grK([],_,[])之後,它現在可以正常工作。沒有線路的問題每次都會變得錯誤,因爲它會向後「重新發射」「L」。因爲'L' beeing直到遞歸完成,我不需要第二個[[_]'括號? – Fyubar
術語'[_]'是一個帶有一個匿名元素的列表。術語'[]'是一個空列表。他們是不同的。如果你的事實的語義含義表示一個空列表,那麼'[]'是正確的。如果事實表明一個匿名元素的列表,那麼'[_]'是正確的。 :)還要注意,如果你有'teilliste_grK([],_,[])。'的事實,那麼'teilliste_grK([],0,[])。'是多餘的,因爲'teilliste_grK([]) ,_,[])。'將匹配'teilliste_grK([],0,[])。','_'實例化爲'0'。 – lurker