このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1247438792/303
# [1] 授業単元: 
# インタラクティブッコミュニケーション 
# [2] 問題文(含コード&リンク): 
# 外部変数を使用せずに、main()から関数を呼び出し、円をドルとユーロに換算し、
# main()内のprintf()で結果を出力するプログラムを作成せよ。 
# 但し、1ドル = 118円, 1ユーロ = 160円とする。また、プログラムは
# 負の値が入力されるまで繰り返されるものとする。 
# 
# http://www.ncc-1701.jp/kakei/InteractiveComm/Class10/InteractiveComm_10.html 
# の一番下の演習。 
# 最終的にはこの形に
# http://www.ncc-1701.jp/kakei/InteractiveComm/Class10/exercise10.gif

'外部変数を使用せずに、main()から関数を呼び出し、円をドルとユーロに換算し、main()内のprintf()で結果を出力するプログラムを作成せよ。但し、1ドル = 118円, 1ユーロ = 160円とする。また、プログラムは負の値が入力されるまで繰り返されるものとする。' :-
        repeat,
        write('換算する円金額を入れてください(終了するときは-1)\n'),
        get_line(Line),
        atom_to_term(Line,_円金額,_),
        レート換算表示(_円金額),
        _円金額 = -1.

レート換算表示(_円金額) :- _円金額 < 0.0,!.
レート換算表示(_円金額) :-
        円レート(ドル,USD),
        円レート(ユーロ,EUR),
        _ドル換算金額 is _円金額 / USD,
        _ユーロ換算金額 is _円金額 / EUR,
        write_formatted('換算した金額は %tドル %tユーロになります\n',[_ドル換算金額,_ユーロ換算金額]),!.

円レート(_通貨,_円レート) :-
        '通貨略号'(_通貨,_通貨略号),
        concat_atom(['http://stocks.finance.yahoo.co.jp/stocks/detail/?code=',_通貨略号,'JPY=X'],URL),
        w3c(URL,L),
        member(A,L),
        char_code(C1,60),char_code(C2,62),  /* ブラウザでS1,S2を表示させるため止むを得ず */
        concat_atom([C1,'span class="yjFL"',C2],S1),
        concat_atom([C1,'/span',C2],S2),
        split(A,[S1],[U1,U2]),
        split(U2,[S2],[_円レート|_]),!.

通貨略号(ユーロ,'EUR').
通貨略号(ドル,'USD').
通貨略号('アメリカドル','USD').
通貨略号('イギリス ポンド','GBP').
通貨略号('インド ルピー','INR').
通貨略号('インドネシア ルピア','IDR').
通貨略号('エクアドル スクレ','ECS').
通貨略号('エジプト ポンド','EGP').
通貨略号('オーストラリア ドル','AUD').
通貨略号('カナダ ドル','CAD').
通貨略号('韓国 ウォン','KRW').
通貨略号('クウェート ディナール','KWD').
通貨略号('コロンビア ペソ','COP').
通貨略号('サウジ リアル','SAR').
通貨略号('シンガポール ドル','SGD').
通貨略号('スイス フラン','CHF').
通貨略号('スウェーデン クローナ','SEK').
通貨略号('タイ バーツ','THB').
通貨略号('台湾 ドル','TWD').
通貨略号('中国 元','CNY').
通貨略号('チリ ペソ','CLP').
通貨略号('デンマーク クローネ','DKK').
通貨略号('トルコ リラ','TRY').
通貨略号('日本 円','JPY').
通貨略号('ニュージーランド ドル','NZD').
通貨略号('ノルウェー クローネ','NOK').
通貨略号('パラグアイ グァラニ','PYG').
通貨略号('フィリピン ペソ','PHP').
通貨略号('ブラジル リアル','BRL').
通貨略号('ベネズエラ ボリバル・フエルテ','VEF').
通貨略号('ペルー ソル','PEN').
通貨略号('香港 ドル','HKD').
通貨略号('マレーシア リンギ','MYR').
通貨略号('南アフリカ ランド','ZAR').
通貨略号('メキシコ ペソ','MXN').
通貨略号('UAE ダーハム','AED').
通貨略号('欧州 ユーロ','EUR').
通貨略号('ヨルダン ディナール','JOD').
通貨略号('ルーマニア レウ','RON').
通貨略号('レバノン ポンド','LBP').
通貨略号('ロシアン ルーブル','RUB').

w3c(URL,X) :-
        w3ctimeout(Timeout),
        concat(['w3c -timeout ',Timeout,' -n "',URL,'"'],W3c),
        shs(W3c,X),!.

w3ctimeout(60).

shs(Command,X) :-
        tmpnam(TMPNAM),
        open(TMPNAM,write,Output),
        system(Command,user_input,Output),
        close(Output),
        open(TMPNAM,read,Input),
        findall(S,(repeat , stream_reads(Input,S) , (S = end_of_file , (!) , fail ; true)),X),
        close(Input),
        unlink(TMPNAM),!.

tmpnam(TMPNAM) :-
        tmpnam(6,L),
        concat_atom(L,A),
        concat_atom(['/tmp/file',A],TMPNAM),
        not(exists(TMPNAM,read)),!.
tmpnam(TMPNAM) :- tmpnam(TMPNAM).

tmpnam(0,[]) :- !.
tmpnam(N,[A|R]) :-
        M is (random mod 122) + 1,
        (   M >=48,M=<57,M1 = M;
                M >=65,M=<90,M1 = M;
                M >=97,M=<122,M1 = M;
                M >=0,M=<26,M1 is M + 65;
                M >=27,M=<47,M1 is M + 38;
                M >=58,M=<64,M1 is M + 10;
                M >=91,M=<96,M1 is M + 6
        ),
        char_code(A,M1),
        N2 is N - 1,
        tmpnam(N2,R),!.

unlink(F) :-
        concat_atom(['rm -f ',F],S),
        system(S).