コンピュータプログラミングの概念・技法・モデル
(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 (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))の第部(一般的計算モデル)、第2章(宣言的計算モデル)、2.9(練習問題)、9-a.(末尾再帰)を解いてみる。
9-a.(末尾再帰)
コード(Emacs)
% 関数を核言語の手続きに翻訳。
local Sum1 in
proc {Sum1 N ?R}
R= if N==0 then R=0
else
local Rr in
{Sum1 N-1 Rr}
N+Rr
end
end
end
end
local Sum1 in
proc {Sum1 N ?R}
if N==0 then R=0
else
local Rr in
{Sum1 N-1 Rr}
R=N+Rr
end
end
end
end
local Sum1 in
Sum1= proc {$ N ?R}
if N==0 then R=0
else
local Rr in
{Sum1 N-1 Rr}
R=N+Rr
end
end
end
end
local Sum2 in
proc {Sum2 N S R}
R= if N==0 then S
else
{Sum2 N-1 N+S R}
R
end
end
end
local Sum2 in
proc {Sum2 N S R}
if N==0 then R=S
else
{Sum2 N-1 N+S R}
end
end
end
local Sum2 in
Sum2= proc {$ N S R}
if N==0 then R=S
else
{Sum2 N-1 N+S R}
end
end
end
% Sum1は、その中にただ1つの再帰呼び出しがあるが、その手続き本体の最後はその手続きの呼び出しではないので、末尾再帰ではない。
% Sum2は、その中にただ1つの再帰呼び出しがあり、かつその手続き本体の最後はその手続きの呼び出しなので、末尾再帰である。
0 コメント:
コメントを投稿