このプログラムは、ドイツの Karlsruhe で行なわれた...
移動
次へ 前へ
上へ 最上
参考
MrPandMrS
イフコンピュータ > MINERVA > 例題プログラム > ベンチマーク > MrPandMrS

MrPandMrS

このプログラムは、ドイツの Karlsruhe で行なわれた International Joint Conference on Artificial Intelligence 83 で、 Martin Nilsson が発表した有名な 'Mr. P and Mr. S problem' 問題を解決するプログラムです。

この問題は以下の通りです。

  ある人が、1 から 100 までの自然数から2つの数を頭の中で思い浮かべます。
  その人は、その2数の和をSさんに、2数の積をPさんにそれぞれ伝えます。
  そして、以下のように対話が行なわれます。

Mr. P: 2数がそれぞれ何かわかりません。 Mr. S: 私もわかりません。でも私は、あなたがそれをわからないであろう ということはわかっています。 Mr. P: あっそうですか。それならば、その2数はわかります。 Mr. S: あっそう? それならば、私もわかります。

問題はもちろん、「2つの数は一体何と何でしょうか?」というものです。

この Nilsson のプログラムは、基礎的なPrologの特徴を組み合わせて 力を発揮するとても美しい例です。

ある人が、2番めの人の知識を知っているということを表現するメタ述語と ちからまかせの探索を行なうことによって、問題を解くのです。

以下にソースコードを紹介します。 (スタンドアローンプログラムとして構成されています。):

main(_) :- ps.
program :- ps.

ps :- w(o1,_,X), write(X), nl.

w(s1,(I,J),(M,N)) :- for(2,M,99),for(2,N,M), M+N =:= I+J. w(p1,(I,J),(M,N)) :- for(2,M,99), for(2,N,M), M*N =:= I*J. w(s2,S,X) :- w(s1,S,X),p3(X). w(p2,S,X) :- w(p1,S,X),p4(X). w(s3,S,X) :- w(s2,S,X),p5(X). w(o1,_,(M,N)) :- for(2,M,99),for(2,N,M), write((M,N)),nl, p3((M,N)), write(p3),nl, p4((M,N)), write(p4),nl, p5((M,N)), write(p5),nl, p6((M,N)), write(p6),nl. p3(X) :- has_two_or_more_solutions(w(p1,X,_)). p4(X) :- has_two_or_more_solutions(w(s2,X,_)), all_in_are(Z, (w(s1,X,W),value(p3(W),Z)),true). p5(X) :- has_exactly_one_solution(w(p2,X,_)). p6(X) :- has_exactly_one_solution(w(s3,X,_)).

value(X,V) :- (X, V=true; V=false),!. all_in_are(X,G,Z) :- \+ ((G,X \= Z)),!. has_exactly_one_solution(X) :- copy_term(X,X2),X,all_in_are(X2,X2,X), !. has_two_or_more_solutions(X) :- copy_term(X,X2),X,!,X2,X \= X2,!.

続く..
MINERVA
ifcomputer logo
f
Expert Services on the Web
言語
English
Japanese
サーバー
USA
Japan
サイトマップ
索引
目次
全体目次
全体索引
印刷向き
imode
PDA
探索
document: http://www.ifcomputer.co.jp/MINERVA/ExamplePrograms/Benchmarks/MrPandMrS/home_jp.html
published 2008/7/7 update 2001/3/22 (c) 1996-2006 IF Computer Japan
IF Computer 〒113-0022 Tel 03-5814-3352 ifcj@ifcomputer.co.jp
Customer Support 東京都文京区千駄木5-28-2   http://www.ifcomputer.co.jp
冒頭へ managed with ubiCMS