4
可以说我想通过逐个添加另一个列表(L)的元素来构造一个列表(L2)。结果应该与输入完全相同。 这个任务很愚蠢,但它会帮助我理解如何通过列表进行递归并移除某些元素。通过在序言中使用递归
create([1,2,3,4], L2)
回报
L2 = [1|create([2,3,4], **)\.
这不是一个理想的结果
create(L, L2) :- (\+ (L == []) -> L=[H|T], append([H], create(T, L2), L2);[]).
称之为:
我已经把下面的代码。
谢谢你的回应。我拿出这一行: remove1(L,L2): - 显示(L2),(\ +(L == []) - > L = [H | T],追加(L2,H,L2) ,remove1(T,L2); [])。 但是,我得到错误:_G256 错误:超出全局堆栈 这是为什么? – screenshot345 2010-03-30 20:33:04
我必须承认,我更熟悉更传统的prolog语法,其中每个谓词为每个参数结构声明一次。我可以这样说,当你遇到堆栈错误时,这意味着你的递归没有终止。这是因为你的终止标准是错误的,或者你的程序的其余部分没有按照你认为应该的方式来减少参数。在这种情况下,我怀疑后者,并建议你仔细观察后缀,因为在我看来,你可能不希望双方都有L2。 – charlieb 2010-03-31 12:31:50