このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/710
#  [1] プログラミング実習(ゲーム科課題)  
#  [2] http://ime.nu/www.dotup.org/uploda/www.dotup.org1373468.txt.html 
#  
#  [2] 入力した要素名からその要素がもっている数値を規定値Nより引き、最終的に予めテキストに
#  保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ
#  例:規定値Nには「x=1000,y=1500,z=2000」
#  要素名A「x=100,y=200,z=300」B「x=50,y=60,z=70」C「x=10,y=20,z=30」という内容を持ったデータを
#  予め作成し保存
#  入力するのはx,y,zの数値ではなくA、B、Cといった要素名
#  
#  動作例:
#  要素名入力:A
#  内部動作
#  N=N‐A
#  (x=1000-100 y=1500-200 z=2000-300)
#  (= x=900 y=1300 z=1700)
#  これを任意の回数繰り返し、Nを入力すると終了する等にてループを抜け
#  最終的にNの中の値とA,B,Cより値よち最も近い要素名を出力する(複数可)
#  例えばNの中身がx=200 y=300 z=300となった時に終了すると「近似要素名出力:A」
#  と出力されるようにせよ
#  
#  /*追加評価
#  APIを利用し、UIを作る
#  よりわかりやすいインターフェースにする
#  等、その他、鋭意工夫を期待しています
#  (と書いてありましたが、そこまでは必要ないと思います。)
#  パワーポイントに長々と書いてあったのを要約したのですが、それでも長くなってすみません*/

'入力した要素名からその要素がもっている数値を規定値Nより引き、最終的に予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_規定値ならび) :-
        催促付き文字列入力('要素名を入力してください : ',_要素名),
        '入力した要素名からその要素がもっている数値を規定値Nより引き、最終的に予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_要素名,_規定値ならび).

'入力した要素名からその要素がもっている数値を規定値Nより引き、最終的に予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_要素名,_規定値ならび) :-
        '入力した要素名からその要素がもっている数値を規定値Nより引き'(_要素名,_規定値ならび,_値の差),
        write_formatted('入力された要素と規定値の差は %t です\n',[_値の差]),
        催促付き文字列入力('要素名を入力してください : ',_要素名_2),
        \+(_要素名_2 = q),
        '入力した要素名からその要素がもっている数値を規定値Nより引き、最終的に予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_要素名_2,_規定値ならび),!.
'入力した要素名からその要素がもっている数値を規定値Nより引き、最終的に予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_直前の要素名,_規定値ならび) :-
        '予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_直前の要素名,_規定値ならび),!.

'入力した要素名からその要素がもっている数値を規定値Nより引き'(_要素名,_規定値ならび,_値の差) :-
        要素名(_要素名,_値ならび),
        値の差を取る(_規定値,_値ならび,_値の差),

値の差を取る([],_,Y,X) :-
        X is abs(sqrt(Y)),!.
値の差を取る([A|R1],[B|R2],S1,X) :-
        C is (A - B) * (A - B),
        S2 is S1 + C,
        値の差を取る(R1,R2,S2,X).

'予めテキストに保存した要素の中よりNにもっとも近い(近似値)要素名を探しだし出力せよ'(_直前の要素名,_規定値ならび) :-
        findmin([_値の差,_要素名],(
                    要素名(_要素名,_値ならび),
                    値の差を取る(_規定値ならび,_値ならび,_値の差)),
                [_最も近い値,_要素名]),
        write_formatted('あなたの選択した要素名は %t ,最も近い要素名は %t です\n',[_直前の要素名,_要素名]).