结果未保存在prolog变量上
我有下面的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). 我想得到一个楼层和
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)
我标记它是正确的,因为它是基于我的代码,我发现了一个不同的和更干净的方法,但我修改了你的代码,它现在好多了。我将添加它作为编辑