首先感谢你的帮助。
关于我的问题:假设我有:
some_fact:- true.
我希望在它之上建立一个看起来像这样的规则:
some_fact:- fail, !.
这是因为我想转换“some_fact:- true.
”以强制假而不删除规则(我不想使用abolish(some_fact,0).
)
问题是我无法找到方法,因为我无法将逗号放在asserta / 1上。我的意思是,当我把:
asserta(some_fact:- fail, !).
之间的逗号强制使用整个规则调用asserta / 2而不是asserta / 1,并且我无法阻止使用引号,因为它声明了一个字符串。
当然我不能简单地放asserta(some_fact:- fail).
因为prolog会搜索下一个返回true的some_fact。
有什么想法吗?再次感谢!
答案 0 :(得分:3)
只需添加括号:
?- asserta((some_fact:- fail, !)).
true.
答案 1 :(得分:1)
断言事实:
asserta(zoo(zebra)).
当事实不再如此时:
retract(zoo(zebra)).
更一般:
asserting(Fact) :-
asserta(Fact).
retracting(Fact) :-
retract(Fact).
示例:
?- asserting(zoo(zebra)).
true.
?- zoo(zebra).
true.
?- retracting(zoo(zebra)).
true.
?- zoo(zebra).
false.