在回溯上增加值
我该如何在回溯方面进行增量...以便该目标会收到增量的数字..每次下一个运行失败时,我想获得下一个数字
S1 is S + 1,goal(S1)
不起作用,因为:
?- S=0, S1 is S+1.
S = 0,
S1 = 1.
?- S=0,between(1,3,_), S1 is S+1.
S = 0,
S1 = 1 ;
S = 0,
S1 = 1 ;
S = 0,
S1 = 1.
这项工作
%%counting
baz(..,C) :- .... arg(...), Y is X + 1, nb_setarg(...), goal(Y), ...
foo(..C) :- ....baz(....,C)..., foo(...C).
%%counter
blah :- ....foo(....,counter(0))...
是不起作用的,我认为递归foo()会迫使baz()初始化计数器(0)...但是我对上面的@sligo解决方案很好
baz(..) :- C = counter(0), .... arg(...), Y is X + 1, nb_setarg(...), goal(Y), ...
foo(..) :- ....baz(....)..., foo(...).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
,即/3 之间的
是什么?每次回溯时,它都会制作下一个数字:
例如
编辑:来自 help在/3之间:
(并查看逻辑学院的帮助页面上的评论)
That's what
between/3
does? Every time on backtracking it makes the next number:e.g.
Edit: From the help for between/3:
(And see the comments on the help page by LogicalCaptain)
使用 不可用的破坏性分配谓词:
替代方案:
示例:
Use non-backtrackable destructive assignment predicate nb_setarg/3:
Alternatives:
Examples: