2014-11-03 76 views
0

我是新來的序言,我想創建一個簡單的謂詞,它將從一個未排序的列表清單中排序列表。檢查(A,B)。在序言中檢查/ 2謂詞將有列表的排序列表

check([ [], [1], [1,1] ], [ [], [1,1], [1] ]). returns true 
check([ [], [1], [1,1] ], [ [1,1], [1] ]). returns false. 

請注意,即使A被排序,它應該只包含B中的元素,而不是更多或更少。

如何在沒有任何內置序言謂詞的情況下實現這個功能?

+0

你所描述的似乎沒有排序。例如'sort([[],[1],[1,1]],X)''我得到'X = [[],[1],[1,1]](不是'[[]] ,[1,1],[1]]')。 – 2014-11-03 20:55:19

+0

X未排序,左變量排序。而不是相反。 – alok 2014-11-03 21:43:37

+0

您是否嘗試過解決方案?您應該顯示您的代碼並指出您卡住的位置。 – lurker 2014-11-03 22:03:48

回答

1

列表的列表本質上是一個樹結構:你只是走樹。類似這樣的:

validate([] , _) . 
validate([X|Xs] , Valids) :- 
    exists_in(X , Valids) , 
    validate(Xs , Valids) 
    . 

exists_in(X , [X|Xs]) :- !. 
exists_in(X , [_|Xs]) :- exists_in(X , Xs) .