结果未保存在prolog变量中

时间:2018-11-01 22:11:31

标签: 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).

我想得到一个在floor和ceil之间的所有数字的列表,我可以使它正常工作,但是它只打印出列表,而不会将其返回作为查询的解决方案。

预期输出为: range(2,7,R)=> R = [2,3,4,5,6,7]

相反,我得到了 range(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), !.    

1 个答案:

答案 0 :(得分:3)

您只需要更改一些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)