在prolog中检查/ 2谓词,它将对列表进行排序

时间:2014-11-03 20:45:18

标签: list sorting prolog

我是prolog的新手,我正在尝试创建一个简单的谓词,它将从未排序的列表列表中排序列表。检查(A,B)。

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

请注意,即使A已排序,它也应仅包含B中的元素,而不是更多或更少的元素。

如何在没有任何内置prolog谓词的情况下实现此功能?

1 个答案:

答案 0 :(得分: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 ) .