Prolog 的新手,试图编写一个谓词来提供一个元素可以插入到列表中任何位置的所有选项。前任:
ins(a, [b,c], R).
应该给:
R = [a,b,c]
R = [b,a,c]
R = [b,c,a]
它确实如此,但随后给出错误“超出全局堆栈”。有没有办法让这更具确定性,给出结果并完成?当它反向运行时,即。ins(X, Y, [a,b,c])。它给出了预期的结果,然后说 false 表示它已经完成。代码:
app([],L,L).
app([H|T],L2,[H|L]) :-
app(T,L2,L).
ins(E, List, R) :-
R = R1,
app(R2, R3, R1),
app([E], R4, R3),
app(R2, R4, List).
这是在在线编译器SWISH中运行代码的链接(这也有一个我希望如何使用 ins 的示例,但 ins 是现在的问题)任何帮助将不胜感激!