関数型言語は何故普及しないのかを考える
■ このスレッドは過去ログ倉庫に格納されています
0303デフォルトの名無しさん
2010/11/12(金) 10:41:34論理型言語のPrologだと「関係」の表現は以下のような簡潔なコードになる。
:- op(800, xfx, '==>'). % ボールの移動を表現する演算子 '==>' を宣言
pitcher ==> catcher. % 命題「ピッチャーからキャッチャーへボールが移動する」を定義。以下同様。
pitcher ==> batter.
batter ==> catcher.
batter ==> fielder1.
batter ==> fielder2.
batter ==> fielder3.
move_ball(X, Y) :- X ==> Y. % 述語「ボールはAからBへ移動する」を定義。以下も同じ。
move_ball(X, Z) :- X ==> Y, Y ==> Z.
**** 実行してみよう。****
?- move_ball(pitcher, fielder2). % ピッチャーから外野手2へボールは移動するか?
true . % 移動する
?- setof(Y, move_ball(pitcher, Y), L). % ピッチャーからどこへボールは送られるのか?
L = [batter, catcher, fielder1, fielder2, fielder3].
?- setof(X, move_ball(X, fielder2), L). % 外野手2はどこからボールを受け取るのか?
L = [batter, pitcher].
?- setof(X, X^move_ball(X, Y), L). 全てのボールの移動を列挙しなさい
Y = batter,
L = [pitcher] ;
Y = catcher,
L = [batter, pitcher] ;
:(以下略)
Haskellで同じ問題を解くコードを書いて下さいまし。「論よりコード」です。何ステップで書けますか?
■ このスレッドは過去ログ倉庫に格納されています