Prolog查询返回错误的布尔值

时间:2018-03-14 03:17:43

标签: prolog prolog-toplevel

所以我有一个事实weather(jan, 17, cold, wind, snow).  和规则

match(W,D,T) :-
      weather(W,D,T,_,_)
  ;   weather(W,D,_,T,_)
  ;   weather(W,D,_,_,T).

当我输入match(jan, 17, wind). Prolog返回true; false.时,我希望它只返回true,但它也返回false,我该如何解决?

1 个答案:

答案 0 :(得分:-1)

我不鼓励使用“;” (OR)运算符(不可读的代码)。 这是你应该写的:

match(W,D,T) :-
    weather(W,D,T,_,_),
    !.
match(W,D,T) :-
    weather(W,D,_,T,_),
    !.
match(W,D,T) :-
    weather(W,D,_,_,T).

由于回溯,您之前的代码“返回”true和false。这没什么不对。