结果未保存在prolog变量上

结果未保存在prolog变量上,prolog,Prolog,我有下面的prolog函数 range(Floor, Ceil, _) :- Ceil2 is Ceil+1, range(Floor, Ceil2, [], Floor). range(_, Ceil, L, Ceil):- write(L), !. range(Floor, Ceil, L, Cnter):- concatenate(L, [Cnter], L2), Cnter2 is Cnter + 1, range(Floor, Ceil, L2, Cnter2). 我想得到一个楼层和

我有下面的prolog函数

range(Floor, Ceil, _) :- Ceil2 is Ceil+1, range(Floor, Ceil2, [], Floor).
range(_, Ceil, L, Ceil):- write(L), !.
range(Floor, Ceil, L, Cnter):- concatenate(L, [Cnter], L2), Cnter2 is Cnter + 1, range(Floor, Ceil, L2, Cnter2).
我想得到一个楼层和天花板之间所有数字的列表,我可以让它工作,但它只打印出列表,而不会将其作为查询的解决方案返回

预期产出将是: 范围2,7,R=>R=[2,3,4,5,6,7]

相反,我得到了 范围2,7,R=>[2,3,4,5,6,7];对

其中列表仅作为功能的一部分打印出来

我怀疑我仍然在以一种迭代的方式思考,这是我问题的根源

编辑以添加连接函数

 concatenate([], L, L).
 concatenate([X|Y], L1, [X|L2]) :- concatenate(Y, L1, L2).
借助@coder的帮助解决方案

rank(Ceil, Ceil, []).
rank(Floor, Ceil, [Floor|R2]):- Floor2 is Floor + 1, range(Floor2, Ceil, R2), !.    

您只需稍微更改range/4谓词:

range(Floor, Ceil, R) :- Ceil2 is Ceil+1, range(Floor, Ceil2, R, Floor).
range(_, Ceil, [], Ceil).
range(Floor, Ceil, [Cnter|L], Cnter):- 
   Cnter2 is Cnter + 1, range(Floor, Ceil, L, Cnter2)

我标记它是正确的,因为它是基于我的代码,我发现了一个不同的和更干净的方法,但我修改了你的代码,它现在好多了。我将添加它作为编辑