【发布时间】:2018-05-05 11:10:11
【问题描述】:
您好,我正在做一个关于 prolog 的项目,但仍在掌握该语言。 我目前有一个列表列表,其中子列表有坐标。
我的目标是选择具有某个坐标 X 的子列表,然后将该列表从它的第一个元素剪切到 X。(只有一个列表)
我认为最初的问题是选择带有成员的子列表。所以我试着这样做。
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 思考,所以我为明显的逻辑错误道歉。
【问题讨论】:
-
相关(即相同的作业问题):stackoverflow.com/questions/50155722/…
-
另外,我的 Prolog 会发出警告,包括:
Clauses of sublist/3 are not together in the source-file ... Current predicate: sulist/3。你有一个错字需要改正。 -
已修复!虽然错字不是问题的根源(我从我的代码翻译并错过了它)。检查您发送的链接,谢谢!
-
发送的链接给了我完成这项工作的总体思路,感谢和抱歉重复!
标签: prolog