2015-06-16 46 views
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]。我只是不知道爲什麼。

+1

檢查你的事實'teilliste_grK([],_,[_])'。這是什麼意思,語義? '_Gxxx'來自'_'。 – lurker

+0

我將它編輯爲'teilliste_grK([],_,[])之後,它現在可以正常工作。沒有線路的問題每次都會變得錯誤,因爲它會向後「重新發射」「L」。因爲'L' beeing直到遞歸完成,我不需要第二個[[_]'括號? – Fyubar

+0

術語'[_]'是一個帶有一個匿名元素的列表。術語'[]'是一個空列表。他們是不同的。如果你的事實的語義含義表示一個空列表,那麼'[]'是正確的。如果事實表明一個匿名元素的列表,那麼'[_]'是正確的。 :)還要注意,如果你有'teilliste_grK([],_,[])。'的事實,那麼'teilliste_grK([],0,[])。'是多餘的,因爲'teilliste_grK([]) ,_,[])。'將匹配'teilliste_grK([],0,[])。','_'實例化爲'0'。 – lurker

回答

0

謂詞中正確的第一個子句是現在最重要的兩個子句的組合。

第一個堅持K是0:你不想要這個。第二個人堅持要在第二個清單末尾添加一個額外的變量:你也不想要這個。

就忽略ķ和關閉列表:

foo([], _, []).