PROLOG 谓词返回 false,否定也返回 false(使用 not)

问题描述 投票:0回答:1

我制定了以下规则。

pokemonOfType(charmander, fire).
pokemonOfType(staryu, water).

typeWins(water, fire). % this should not affect the outcome,
                       % but who knows

pokemonWins(Winner, Loser) :-
    pokemonOfType(Winner, TypeWinner), 
    pokemonOfType(Loser, TypeLoser),
    typeWins(TypeWinner, TypeLoser).

如果我运行

?-pokemonWins(charmander, staryu).
我会得到 以下输出(假)。如果我运行
?-not(pokemonWins(charmander, staryu)).
我也会得到错误!

发生什么事了?

prolog negation
1个回答
0
投票

在 Prolog 中,not 被实现为“否定即失败”。如果 X 失败,则 not(X) 成功;如果 X 成功,则 not(X) 失败。 not 并不意味着经典意义上的“逻辑非”。

由于这种混乱,它被认为已被弃用,并且根据 SWI 序言,不应在新代码中使用它。 https://www.swi-prolog.org/pldoc/man?predicate=not/1

© www.soinside.com 2019 - 2024. All rights reserved.