作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下序言函数
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 之间所有数字的列表,我可以让它工作,但它只打印出列表,不会将其作为查询的解决方案返回。
预期输出为:范围(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)
关于prolog - 结果没有保存在 prolog 变量上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53110099/
我是一名优秀的程序员,十分优秀!