コンピュータプログラミングの概念・技法・モデル
(IT Architect' Archive
クラシックモダン・コンピューティング6)
(IT Architects’Archive CLASSIC MODER)
(翔泳社)
セイフ・ハリディ (著), ピーター・ヴァン・ロイ (著)
Peter Van-Roy (著), Seif Haridi (著), 羽永 洋 (翻訳)
原書: Concepts, Techniques,
and Models of Computer Programming
開発環境
- OS X Yosemite - Apple, Microsoft Windows 8.1 Pro (OS)
- Emacs (Text Editor)
- Oz (プログラミング言語)
- Mozartプログラミングシステム(Mozart 2) (実装)
コンピュータプログラミングの概念・技法・モデル(IT Architect' Archiveクラシックモダン・コンピューティング6) (IT Architects’Archive CLASSIC MODER)(セイフ・ハリディ (著)、ピーター・ヴァン・ロイ (著)、Peter Van-Roy (著)、 Seif Haridi (著)、羽永 洋 (翻訳)、翔泳社、原書: Concepts, Techniques, and Models of Computer Programming(CTM))の第部(一般的計算モデル)、第4章(宣言的並列性)、4.11(練習問題)、6.(スレッドのスケジューリング)を解いてみる。
6.(スレッドのスケジューリング)
元の場合と違い、各スレッドが変数の値の束縛により同期されずに、スキップされて、合計されないストリームの要素が出てくるから。本当の合計よりだいぶ小さくなる。
コード(Emacs)
declare Generate Sum Skip
fun {Generate N Limit}
if N<Limit then
N|{Generate N+1 Limit}
else
nil
end
end
fun {Sum Xs A}
case {Skip Xs}
of X|Xr then {Sum Xr A+X}
[] nil then A
end
end
fun {Skip Xs}
if {IsDet Xs} then
case Xs
of _|Xr then {Skip Xr}
[] nil then nil end
else Xs end
end
local Xs S in
thread Xs={Generate 0 150000} end
thread S={Sum Xs 0} end
{Browse S}
end
出力結果(Emacs, Oz Compiler)
Mozart Compiler 2.0.0-alpha.0+build.4105.5c06ced (Tue, 2 Sep 2014 18:39:07 +0200) playing Oz 3
declare Generate Sum Skip
fun {Generate N Limit}
if N<Limit then
N|{Generate N+1 Limit}
else
nil
end
end
fun {Sum Xs A}
case {Skip Xs}
of X|Xr then {Sum Xr A+X}
[] nil then A
end
end
fun {Skip Xs}
if {IsDet Xs} then
case Xs
of _|Xr then {Skip Xr}
[] nil then nil end
else Xs end
end
local Xs S in
thread Xs={Generate 0 150000} end
thread S={Sum Xs 0} end
{Browse S}
end
Declared variables:
Generate: procedure/3
Skip: procedure/2
Sum: procedure/3
% -------------------- accepted
0 コメント:
コメントを投稿