2017-04-16 57 views
0

的指定位置我是新來的Prolog,現在我「在列表L中的位置4th元素E不是」卡住這個線索序言 - 檢查一個元素沒有在列表

L = [_,_,_,E] => false 

set_equal([],[]). 
set_equal([H|T],R):- 
    member(H,R), 
    remove(H,R,Rez), 
    set_equal(T,Rez). 

然後我用這樣的

notin4(X,L):- 
     set_equal([X,_,_,_],L) 
    ; set_equal([_,X,_,_],L) 
    ; set_equal([_,_,X,_],L). 

012一些愚蠢的方式,我比較列表
notin4(X,L):- not(set_equal([_,_,_,X],L). 

但它不工作:(

任何人都可以指向我了另一種方式來解決這個線索? 非常感謝!

+0

你的「的意思,但它不」工作「?它做什麼呢? – Carcigenicate

+0

@Carcigenicate:實際上,這個問題可以在沒有這個線索的情況下解決(並且結果是OK)。我添加了這個線索來測試我的類型爲「E不在L中的第四個」的序言代碼是否正確。但是,在我添加這個線索之後,輸出結果出錯了。 –

+0

正確的序言方式:'notin4(X,[_,_,_,X | _]): - !,失敗.' – CapelliC

回答

2

最簡單方法是:

list_not_nth(List, N, X) :- 
    nth1(N, List, Y), 
    dif(X, Y). 

如果你知道你正在尋找的第四元素,你可以這樣做:

list_not_4th([_,_,_,X|_], Y) :- 
    dif(X, Y). 
+0

@ThaiHQ First你真的需要解釋你在做什麼,你的問題是什麼,現在你的問題和評論讀起來像是一個小小的謎語, – 2017-04-17 02:31:58

+0

哦,現在沒問題,我明白問題:D。謝謝你的支持。 –

相關問題