获取中间变量分配

时间:2017-11-27 11:07:24

标签: prolog

我正在尝试使用Prolog代表房间的状态。

我有一套规则和一系列事实,但有时候有一些事实 没有定义的。例如,房间内的温度可能会降低 冷却或打开窗户,但有时我没有窗户传感器。

% Rules

temperature_trend(decrease) :-
    cooling(on).
temperature_trend(decrease) :-
    window(open).

% Facts

cooling(off).

%window(close).  % Unknown, I do not have a window sensor

% Main

main() :-
    temperature_trend(decrease).

如果我运行此程序,我会收到undefined procedure错误。我可以处理 这通过明确设置窗口 状态到"任何"与window(W).(我以编程方式准备Prolog 来源,所以这很容易。)

现在查询temperature_trend(decrease) 会成功,因为window(W)会导致window(open)。但是,在这 我希望知道W = open

有没有办法为这个事实返回变量赋值?或者我是否以错误的方式解决问题?

注意 规则树可以任意深入,例如我可以添加一个新规则next_temperature(lower) :- temperature_trend(decrease).而我仍然 只想通过设置next_temperature(lower)来了解W = open成功。条款也比较复杂 因为他们也有时间索引(T = 232)。

也许一个选项是返回一个空的分配列表 如果所有事实都已知。

1 个答案:

答案 0 :(得分:0)

编写一个元解释器,它可以为您提供真实的内容,例如,

msg.text

现在,给定prove(Goal, True) :- phrase(prove(Goal), True). prove(true) --> !. prove((A,B)) --> !, prove(A), prove(B). prove((A;B)) --> !, ( prove(A) ; prove(B) ). prove(Fact) --> [Fact], { clause(Fact, Body) }, prove(Body). ,我们得到:

window(_)

可能有很多变化!