【发布时间】:2014-09-14 14:12:22
【问题描述】:
我刚刚启动 Prolog,为了练习,我试图比较两个列表,看看第一个列表是否比第二个列表大一个元素。到目前为止,我得到了基本情况的工作,但是对于任何具有多个元素的列表,它都会无限循环。谁能解释为什么会这样?任何信息表示赞赏。
代码
one_longer([H],[]).
one_longer([H|T],[H2|T2]) :- one_longer([T],[T2]).
【问题讨论】:
我刚刚启动 Prolog,为了练习,我试图比较两个列表,看看第一个列表是否比第二个列表大一个元素。到目前为止,我得到了基本情况的工作,但是对于任何具有多个元素的列表,它都会无限循环。谁能解释为什么会这样?任何信息表示赞赏。
代码
one_longer([H],[]).
one_longer([H|T],[H2|T2]) :- one_longer([T],[T2]).
【问题讨论】:
子句应该是:
one_longer([H|T],[H2|T2]) :- one_longer(T,T2).
one_longer([T],[T2]) 形成一个只有一个元素的新列表,这会导致观察到的循环,因为再次应用规则时会不断询问one_longer([[]],[[]]),其中one_longer(T,T2) 将one_longer 应用于两者的其余部分列表。
【讨论】: