prolog中的命题逻辑有困难



我需要将以下命题转换为序言代码,我不理解操作符是如何工作的。我通常使用java。

"牛仔裤只适合休闲,西裤只适合正式,卡其裤只适合半正式,腰带不适合休闲,黑袜子可以随时接受。休闲= C,半正式= SF,正式= F,牛仔裤= J,西裤= DP, Kakis = K,腰带= B,黑袜= BS。J→C, DP ->F, K ->SF, B ->C, b>(C v SF v F)">

下面是我已经写好的代码:

casual(jeans).
formal(dress_pants, belt, black_socks).
semiFormal(khakis).
formal(belt).
semiFormal(belt).
casual(black_socks).
formal(black_socks).
semiFormal(black_socks).

一个一元谓词p可以看作是一个集合p因此,字面量p(X)可以看作集合隶属度检验X∈P. 因此,目标p(X)将为true错误或(即命题),取决于X属于集合P

句子牛仔裤只是休闲的,西裤只是正式的,kakis只是半正式的,腰带不是休闲的,黑袜子是随时可以接受的。可以表示为集合:

  • = {,black_socks}。
  • 正式
  • = {dress_pants,,black_socks}
  • semi_formal= {卡其裤,,black_socks}

这些集合可以用以下事实在Prolog中表示:

casual(jeans).
casual(black_socks).
formal(dress_pants).
formal(belt).
formal(black_socks).
semi_formal(khakis).
semi_formal(belt).
semi_formal(black_socks).

下面是Prolog关于这些事实的一些查询:

?- casual(jeans).
true.
?- casual(belt).
false.
?- casual(X).
X = jeans ;
X = black_socks.
?- formal(X).
X = dress_pants ;
X = belt ;
X = black_socks.
?- semi_formal(X).
X = khakis ;
X = belt ;
X = black_socks.

最新更新