Prolog 如何生成强制执行false的断言?

Prolog 如何生成强制执行false的断言?,prolog,prolog-assert,Prolog,Prolog Assert,首先谢谢你的帮助 关于我的问题:假设我有: some_fact:- true. 我想在上面建立一条规则,如下所示: some_fact:- fail, !. 这是因为我想将“some\u fact:-true.”转换为在不删除规则的情况下强制执行false(我不想使用废除(some\u fact,0)。) 问题是我找不到这样做的方法,因为我无法将逗号放在asserta/1上。我的意思是,当我把: asserta(some_fact:- fail, !). 中间的逗号强制使用整个规则调用as

首先谢谢你的帮助

关于我的问题:假设我有:

some_fact:- true.
我想在上面建立一条规则,如下所示:

some_fact:- fail, !.
这是因为我想将“
some\u fact:-true.
”转换为在不删除规则的情况下强制执行false(我不想使用
废除(some\u fact,0)。

问题是我找不到这样做的方法,因为我无法将逗号放在asserta/1上。我的意思是,当我把:

asserta(some_fact:- fail, !).
中间的逗号强制使用整个规则调用asserta/2而不是asserta/1,我不能阻止使用引号,因为它断言一个字符串

当然,我不能简单地把
asserta(some-fact:-fail)。
因为prolog将搜索下一个返回true的some-fact

有什么想法吗?再次感谢

要断言这一事实:

asserta(动物园(斑马))。

当事实不再真实时:

retract(动物园(斑马))。

更一般的:

asserting(Fact) :-
    asserta(Fact).

retracting(Fact) :-
    retract(Fact).
例如:

?- asserting(zoo(zebra)).
true.

?- zoo(zebra).
true.

?- retracting(zoo(zebra)).
true.

?- zoo(zebra).
false.
只需添加括号:

?- asserta((some_fact:- fail, !)).
true.

我已经说过我不想废除(顺便说一句,收回不起作用,因为这是一个算术为0的规则,不是事实)。不管怎样,谢谢。你似乎在问一个事实,因为你一直在问题中使用“某个事实”这个名字。无论如何,它确实适用于arity为0的规则。你试过我的例子吗?而且,像姆布拉奇一样,我不明白你为什么试图避免删除规则。你能解释一下吗?是的。。。我应该用“一些规则:-正确”。对不起,哈哈。实际上,我并不是想避免删除规则,我只是想知道如何断言,因为我在这里简化了一个更复杂的场景。谢谢哦,出于某种原因,我的老师也说了同样的话:收回适用于算术为0的规则。然而,当我们都在程序上尝试它时,它不起作用!所以我们用废除来代替。谢谢你,朋友!为答复干杯!顺便说一下:如果谓词已经在使用,并且您想要断言/收回,那么您必须首先将其声明为“动态”。所以这可能是它不起作用的一个原因。天哪,我真不敢相信它这么简单。我到处都找不到。谢谢如果它是asserta((某些事实:-!,fail))的话,效果会更好。