0

アイザックとアルバートは、スウェーデンで開催された第3回国際科学博覧会の結果について興奮して説明しました。ルイ、ルネ、ヨハネスの3人の出場者がいました。アイザックはルイがフェアに勝ったと報告し、ルネは2位になりました。一方、アルバートはヨハネスがフェアに勝ったと報告し、ルイは2位になりました。

実際、アイザックもアルバートも科学博覧会の結果について正しい報告をしていませんでした。それらのそれぞれは、1つの正しいステートメントと1つの誤ったステートメントを与えました。3人の出場者の実際の配置は何でしたか?ソリューションのベースをPrologプログラムにしてください。

ええと、私はプロローグの初心者であり、そのような段落をプロローグコードに解釈したいのですが、これにどのようにアプローチするかわかりません。それについて教えてもらえますか?

4

1 に答える 1

1

まず、アイザックとアルバートの発言を記録します。1と2は、ステートメント( "Isaacの最初のステートメント...")を識別するために使用されます。各リストは、参加者を順番に表しています。

isaac(1,[louis,_,_]).
isaac(2,[_,rene,_]).
albert(1,[johannes,_,_]).
albert(2,[_,louis,_]).

次に、誰がフェアに参加したか、そしてどんな答えも3つの名前の順列でなければならないと言います。私はSWIプロローグを使用しているのでpermutation、組み込みの述語も同様です。

domain([louis,johannes,rene]).
valid(X):- domain(D), permutation(D,X).

最後に、すべてをまとめます。

go(X) :- isaac(I,X), 
         albert(J,X), 
         valid(X), 
         \+ (isaac(K,X), dif(I,K)), 
         \+ (albert(L,X), dif(J,L)). 

最後の2行は、Isaac(Albert)の1つの主張だけが真実であることを保証します。

于 2012-05-28T17:43:10.200 に答える