Prolog を勉強しようとしていますが、論理的な演習に問題があります。
ボブ、トム、サムは会計士、レジ係、マネージャーとして銀行で仕事をしています。それらに関するいくつかの事実を次に示します。
- サムならレジ係、トムならマネージャー。
- サム - マネージャー、トム - 会計士の場合。
- トムがレジ係でない場合、ボブはマネージャーではありません。
- ボブなら会計士、サムならマネージャー。
トム、サム、ボブの職業を調べてください。
Prolog を勉強しようとしていますが、論理的な演習に問題があります。
ボブ、トム、サムは会計士、レジ係、マネージャーとして銀行で仕事をしています。それらに関するいくつかの事実を次に示します。
- サムならレジ係、トムならマネージャー。
- サム - マネージャー、トム - 会計士の場合。
- トムがレジ係でない場合、ボブはマネージャーではありません。
- ボブなら会計士、サムならマネージャー。
トム、サム、ボブの職業を調べてください。
データセットが小さい場合は、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.