0

Prolog を勉強しようとしていますが、論理的な演習に問題があります。

ボブ、トム、サムは会計士、レジ係、マネージャーとして銀行で仕事をしています。それらに関するいくつかの事実を次に示します。

  • サムならレジ係、トムならマネージャー。
  • サム - マネージャー、トム - 会計士の場合。
  • トムがレジ係でない場合、ボブはマネージャーではありません。
  • ボブなら会計士、サムならマネージャー。

トム、サム、ボブの職業を調べてください。

4

1 に答える 1

0

データセットが小さい場合は、generate と testを使用して解決できます。順列/2を参照してください。各ルールを簡単に変換するには、変数にワーカー名を付けます。最初の条件だけを示します

q([sam=Sam, tom=Tom, bob=Bob]) :-
  ...,
  ( Sam = cashier -> Tom = manager ; true ),
  ....

それで、私はこれらの解決策を得る

?- q(X).
X = [sam=accountant, tom=cashier, bob=manager] ;
X = [sam=manager, tom=accountant, bob=cashier] ;
X = [sam=accountant, tom=manager, bob=cashier] ;
false.
于 2013-01-05T22:29:25.047 に答える