Swi Prolog从列表列表中选择列表

Swi Prolog从列表列表中选择列表,prolog,Prolog,您好,我正在做一个关于prolog的项目,并且仍然掌握该语言。 我目前有一个列表列表,其中子列表有坐标 我的目标是选择具有特定坐标X的子列表,然后将该列表从其第一个元素剪切到X(仅一个列表) 我认为首先问题是选择带有member的子列表。所以我试着这么做 sublist([],_, []). sublist([H|R],Pos, [H|Aux]) :- member(Pos,H), !, sublist(R,Pos, Aux). sublist([H|R],Pos, Aux) :

您好,我正在做一个关于prolog的项目,并且仍然掌握该语言。 我目前有一个列表列表,其中子列表有坐标

我的目标是选择具有特定坐标X的子列表,然后将该列表从其第一个元素剪切到X(仅一个列表)

我认为首先问题是选择带有member的子列表。所以我试着这么做

sublist([],_, []).
sublist([H|R],Pos, [H|Aux]) :-
    member(Pos,H), !,
    sublist(R,Pos, Aux).
sublist([H|R],Pos, Aux) :-
    sublist(R,Pos,Aux).
这不起作用:

?- sublist([[(1,2),(1,3),(3,5)],[(1,5),(1,2)]], (1,5), X).
X = [].
第一阶段我想要的是:

?- sublist([[(1,2),(1,3),(3,5)],[(1,5),(1,2)]], (1,5), X).
X = [(1,5),(1,2)].
(之后,当我选择了子列表时,我计划做一件类似的事情,将元素添加到一个空列表中,直到元素等于X)

因此,最终结果将是:

?- sublist([[(1,2),(1,3),(3,5)],[(1,5),(1,2)]], (1,5), X).
X = [(1,5)].

我做错了什么?我仍在学习用Prolog进行思考,因此我为明显的逻辑错误道歉。

如果我正确理解了您的问题:

sublist(L, Elem, M) :-
    member(M, L),
    member(Elem, M).
L
包含一个列表
M
,其中包含和元素
Elem

给出了该结果:

?- sublist([[(1,2),(1,3),(3,5)],[(1,5),(1,2)]], (1,5), X).
X = [(1, 5),  (1, 2)] ;
false.

相关(即,相同的家庭作业问题):此外,我的序言也会发出警告,包括:
子列表/3的子句在源文件中不在一起。。。当前谓词:sulist/3
。你有一个打字错误需要修正,修正了!虽然打字错误并不是问题的根源(我从代码中翻译出来,但没有找到)。正在检查您发送的链接,谢谢!发送的链接给了我使这项工作的总体思路,感谢并为复制感到抱歉!