【发布时间】:2015-03-23 18:39:08
【问题描述】:
我正在尝试在 Prolog 中创建 findall 的替代方案。
我拥有的是:
solutions(A,T,S) :-
T,
assert(temp(A)),
fail.
solutions(A,T,S) :-
obtain([],S).
obtain(X,S) :-
retract(temp(A)),
obtain([A|X],S).
obtain(S,S).
然而,这给了我不一致的结果。怎么了?提前谢谢你。
【问题讨论】:
-
您能描述一下您的结果中有什么不一致吗?
-
也许使用
assertz而不是assert可以解决这个神秘的不一致问题。 -
@EugeneSh。我相信
assert和assertz做同样的事情。 :) -
@lurker 会断言保证追加到末尾吗?我找不到任何提及它的东西..
-
@EugeneSh。如果它是 SWI Prolog,那么我相信它从
assert/1is deprecated in favor ofassertz/1开始就可以了。我不知道为什么它会不一致。我仍在等待 OP 解释不一致之处。 :)
标签: prolog prolog-findall