如何在 Prolog 中编写 IF ELSE 条件

use*_*185 3 if-statement prolog

我是一个 C# 人,对 prolog 非常陌生。我需要为以下场景编写一个 prolog 程序。任何人都可以帮助实现它。

两个人共用一个抽屉。胸部有 4 个抽屉,抽屉 1 和 2 属于 Person1,抽屉 3 和 4 属于 Person2。

他们把手机、钱包和书放在抽屉里。Person2 在抽屉里丢了手机。他检查了属于他的抽屉 3 和 4,但找不到他的手机。然后他检查了抽屉 1 和 2,在抽屉 2 中找到了它。我需要为此场景编写 prolog 代码。

person(person1).
person(person2).

drawers(drawer1).
drawers(drawer2).
drawers(drawer3).
drawers(drawer4).

belongs_to(drawer1, person1).
belongs_to(drawer2, person1).
belongs_to(drawer3, person2).
belongs_to(drawer4, person2).

item(phone2).

phone_in(drawer).
phone_in(drawer2).
Run Code Online (Sandbox Code Playgroud)

要运行的命令及其结果

?- phone_in(drawer4).
false.

?- phone_in(drawer3).
false.

?- phone_in(drawer1).
false.

?- phone_in(drawer2).
true.
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写如下条件。

?- phone_in(drawer2).
true.
Run Code Online (Sandbox Code Playgroud)

想要根据上述查询的结果(真/假)运行条件。

if(false)
    write("phone not found!");
else if(true)
    write("please found in your search area");
Run Code Online (Sandbox Code Playgroud)

请建议我改进我的代码。

小智 5

语法是这样的

( condition -> then_clause ; else_clause )
Run Code Online (Sandbox Code Playgroud)

可以这样写

( phone_in(drawer2) =:= true ->  
  write('phone found in your search area'),
  fail
  ; phone_in(drawer2) =\= false -> 
  ; write('phone not found!'),nl
)
Run Code Online (Sandbox Code Playgroud)