読者です 読者をやめる 読者になる 読者になる

akimachoのはてなブログ

ICTとデザインのためのブログ

『プログラミングの基礎』読書日誌-19日目-

はじめに

今回は,第16章 情報の蓄積です.この章をもって,一区切りになります.

アキュムレータ

アキュムレータ(accumulator)とは,欠落している情報を補うために導入される引数のことをいいます.各辞書を尋ねてみると以下のような意味のようです.

ウィズダム英和辞典によると,

〘コンピュ〙アキュムレータ, 累算器 〘演算の結果が格納されるレジスタの一種〙.

英辞郎 第八版によると,

アキュムレーター、累算器、積算器、加算器

e-words.jp

アキュムレータについて

これまでは与えられた問題は部分問題にブレークダウンされ独立に解けることが前提としてきました.しかし,再帰呼び出しをする際に情報が欠落してしまうケースがあります.その欠落した情報を補う役割を担うのが,アキュムレータです.また,アキュムレータを使った関数は,他の関数の局所関数となります(p.170).

アキュムレータ に対するデザインレシピ

  • 情報が欠落していることがわかったら,アキュムレータを使って欠落した情報を補う
  • アキュムレータの働きを目的の次の行に明示する

アキュムレータを使うことは簡単ではありません。どのようなアキュムレータを使えばよいのかは問題ごとに異なります。また,アキュムレータを使う関数を作る際には何が不変に保たれているのかを意識して書かなくてはなりません。しかし,アキュムレータを上手に使うと,複雑なプログラムを把握できる形で作ることができます。p.172

おわりに

「命令型プログラミングなら反復(ループ)を使えば簡単なのに・・・」と思える問題に対して,関数型プログラミングでは再帰に加えてアキュムレータを使っていくということを見てきました.

余談ですが,渡辺 治, 米崎 直樹『計算論入門』(日本評論社)をパラパラと読みました.この本によると,命令型プログラミングと関数型プログラミングの理論的背景は以下のような対応関係をもっているようです(p.p.138-139).(以下のテーブルは私がまとめたものです)

プログラミングスタイル 理論的背景
命令型プログラミング チューリング機械(による計算の記述)
関数型プログラミング ラムダ計算

チューリング機械やラムダ計算は,本質的には同じものらしいのですが(多分,「チャーチ=チューリングの提唱」がそれにあたるものだと思います),そこから違うプログラミングスタイルが生まれるというのは興味深いですね.

チャーチ=チューリングのテーゼ - Wikipedia

d.hatena.ne.jp

『プログラミングの基礎』が読み終わったら,次は『計算論入門』をじっくり読んでみたいと思います.

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

計算論入門  計算の基本原理理解のために (OD版)

計算論入門 計算の基本原理理解のために (OD版)