是否可以查看给定谓词的所有含义是真还是假?
Is it possible to view all implications of a given predicate being true or false?
我正在尝试构建一台可以回答用户提出的问题的机器,但我遇到了一个我不知道如何解决的问题,归结为以下几点:
设想以下程序:
friendlycat(X) :- cat(X), friendly(X).
cat("Felix").
我们想知道 Felix 是否是一只友好的猫,所以我们使用 friendlycat("Felix")。
问题是我们程序员不知道 Felix 是不是一只友好的猫。如果给定某个 X,friendly(X) 是真还是假,有没有办法自动查看其含义?
例如,我们可以得到这样的输出吗?
Felix (friendly("Felix") = True)
False (friendly("Felix") = False)
我建议您查看 Constraint Handling Rules (CHR)。
这可能是您快速推理此类限制及其含义的最佳选择。
例如:
:- use_module(library(chr)).
:- chr_constraint cat/1, friendly/1, friendlycat/1.
cat(X), friendly(X) ==> friendlycat(X).
示例查询:
?- cat(felix), friendly(felix).
cat(felix),
friendly(felix),
friendlycat(felix).
?- cat(X), friendly(X).
cat(X),
friendly(X),
friendlycat(X).
我正在尝试构建一台可以回答用户提出的问题的机器,但我遇到了一个我不知道如何解决的问题,归结为以下几点:
设想以下程序:
friendlycat(X) :- cat(X), friendly(X).
cat("Felix").
我们想知道 Felix 是否是一只友好的猫,所以我们使用 friendlycat("Felix")。 问题是我们程序员不知道 Felix 是不是一只友好的猫。如果给定某个 X,friendly(X) 是真还是假,有没有办法自动查看其含义?
例如,我们可以得到这样的输出吗?
Felix (friendly("Felix") = True)
False (friendly("Felix") = False)
我建议您查看 Constraint Handling Rules (CHR)。
这可能是您快速推理此类限制及其含义的最佳选择。
例如:
:- use_module(library(chr)). :- chr_constraint cat/1, friendly/1, friendlycat/1. cat(X), friendly(X) ==> friendlycat(X).
示例查询:
?- cat(felix), friendly(felix). cat(felix), friendly(felix), friendlycat(felix). ?- cat(X), friendly(X). cat(X), friendly(X), friendlycat(X).