2017-04-16 45 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。谢谢你的支持。 –

相关问题