如何在Prolog中表达下面三个句子?
All summers are warm. If it not summer, then it is winter. Now it is winter.
如何在Prolog中表达下面三个句子?
All summers are warm. If it not summer, then it is winter. Now it is winter.
好问题。正如 @larsman(现在应该是 @FredFoo)所说,这可能是一个重要话题。他的回答确实非常好。
由于您的问题可能是出于需要自定义语言的原因(Prolog 的主要用途之一),因此我提议为虚拟 DSL 提供语法糖(这意味着它现在完全为空...)。
:- op(500, fx, all).
:- op(500, fx, now).
:- op(600, xfx, are).
:- op(700, fx, if).
:- op(399, fx, it).
:- op(398, fx, is).
:- op(397, fx, not).
:- op(701, xfx, then).
all summers are warm.
if it is not summer then it is winter.
now it is winter.
SWI-Prolog很友好地将被存储的op标红,也就是说可以轻松查询它们。这些是已声明的高优先级关键词:即are、then和now。
?- now X.
X = it is winter.
warm :- summer.
winter.
winter :- \+ summer.
这里提供一个不使用否定的解决方案,而是指定了季节的全集。
season(summer).
season(winter).
now(winter).
warm(S) :-
season(S),
S = summer.
一些示例查询:
?- now(S).
S = winter ;
false.
?- now(S), warm(S).
false.
?- warm(S).
S = summer ;
false.
winter(now).
warm(X) :- summer(X).
summer(X) :- \+ winter(X).
winter(X) :- \+ summer(X).
这将是实现此目的的一种方式。
在操作中:
6 ?- summer(now).
false.
7 ?- summer(tomorrow).
ERROR: Out of local stack
8 ?- warm(now).
false.