返回列表哪个元素属于直到元素位置

时间:2018-05-05 16:40:54

标签: list prolog

我想构建一个给出List列表和带有坐标X的Element的谓词,检查X是否属于该主List中的任何列表,如果它属于任何列表,则返回ReturnList作为一个列表,其元素一直到找到元素X的位置。

例如,给定;

?-checklist((3,4),[[(1,3), (1,2), (1,1)],[(1,4), (2,4), (3,4), (4,4)]], ReturnList)

返回

ReturnList = [(1,4), (2,4), (3,4)]

我试图实现这一点,到目前为止我已经

get_list([],_,[]).
get_list([List], Element, ReturnList):- 
  member(List, Element),
  get_list(List|Rest, Element, List).

但这是我的第一个prolog程序之一,我发现很难理解逻辑

1 个答案:

答案 0 :(得分:2)

我的解决方案(带注释)使用Prolog内置member/2append/3

checklist(Elem, List, ReturnList) :-
    member(SubList, List),          % SubList is contained in List
    member(Elem, SubList),          % Elem is contained in SubList
    append(ReturnList, _, SubList), % ReturnList is a prefix of SubList
    append(_, [Elem], ReturnList).  % Elem is the last element of ReturnList

测试:

?- checklist((3,4),[[(1,3), (1,2), (1,1)],[(1,4), (2,4), (3,4), (4,4)]], ReturnList).
ReturnList = [(1, 4),  (2, 4),  (3, 4)] ;
false.