我正在尝试使用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
)。
也许一个选项是返回一个空的分配列表 如果所有事实都已知。
答案 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(_)
可能有很多变化!