0

我正在尝试编写谓词 range\3 ,它接受三个参数,第一个是开始,第二个是结束,并在第三个参数中返回生成的列表。

例如响(1,5,L)。

L = [1, 2, 3, 4, 5]

我用了这段代码

range(E,E,[E]).

range(S,E,L):-
    S1 is S + 1,
    range(S1,E,[S|L]).

但它不起作用,当我使用跟踪命令知道错误在哪里时,我认识到基本情况是无用的,我也尝试了绿色切割!在基本情况下但它不起作用 range(E,E,[E ]),!.

所以,如果有人知道是什么问题,请帮助我

4

1 回答 1

0

您正在以“错误”的方式构建列表。考虑一下,当您调用基本案例时,它将收到 consed 列表。如何匹配单个元素列表?试试吧

range(S,E,[S|L]):-
    S1 is S + 1,
    range(S1,E,L).
于 2013-03-30T21:18:00.873 回答