如何生成强制假的断言?

时间:2013-10-01 06:18:44

标签: prolog prolog-assert

首先感谢你的帮助。

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

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。

有什么想法吗?再次感谢!

2 个答案:

答案 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.