見出し画像

関数型プログラミング事始め (42) 総集編(1)

関数型プログラミングがはじめての方へ贈る入門の書
前節:評価(3) 次節:未公開
参考書:
・五味 弘「はじめてのLisp関数型プログラミング」技術評論社(2016)
・大山口 通夫、五味 弘「プログラミング言語論」コロナ社(2008)
・五味 弘「関数型プログラミングと数学(ITと数学)」技術評論社(2021)

関数型プログラミングの記事の総集編として、今までの記事の目次を一覧で紹介します。記事は40編以上になりますが、これを読んでもらえれば、関数型プログラミングの利点とそして欠点、その対応などがわかります。この関数型プログラミングはプログラミング全般の指針になりますので、ぜひ読んで実践してください。

ここでは関数型プログラミングの記事の目次を紹介することで、関数型プログラミングの総集編としています。その第1回となります。

1章. 関数型プログラミングとは

1.1 関数型プログラミングの定義=副作用がない関数

1.2 関数型プログラミングの効能=副作用がない利点

(1) 再利用がしやすい
(2) 並列処理に向いている
(3) 組み合わせが自由
(4) バグが少ない
(5) テストやデバッグがしやすい
(6) シンプル
(7) その他の効能(了解性、最適化、動的)
(8) 効能のまとめ

1.3 関数型プログラミングの苦難=その原因

(1) 変数は使えない? - 破壊的代入の禁止

(考察)オブジェクト指向プログラミングの欠点
(弁解)グローバル変数を使いたい
(対策)グローバル変数は引数に繰り込み

(2) 配列が使えない? - ミュータブルの呪い

(例) Javaの文字列はイミュータブルで、Cはミュータブルで
(弁解と対策) 配列を使いたい

(3) 再帰プログラミング - 呪いと祝い

(例) 再帰プログラミングの階乗計算
(考察)再帰プログラミングの呪いと祝い
(考察)関数型プログラミングでは繰り返しは悪なのか

(4) ラムダの苦難

(参考)なぜラムダなのか?
(考察)ラムダの苦楽

(5) 高階関数の苦悩

(考察)関数はデータ
(考察)高階関数は定型的に

(6) 遅延評価の苦難 - 左側優先と内側優先

(考察) 遅延評価 - 必須呼び出し

(7) その他の苦難

2章 Lisp超入門 - 関数型プログラミングのための

2.1 Lispは関数型プログラミング言語

(1) 副作用

(2) イミュータブルデータ

(3) 再帰プログラミング

(4) ラムダ計算

(5) 高階関数

(6) 遅延評価

(7) その他


2.2 Lisp事始め - Lisp処理系の導入

(1) ISO標準 ISLisp

(2) ISLisp処理系 OK! ISLisp

(3) ISLispの動作確認

(4) (参考) Easy-ISLisp


2.3 Lispの基本構造

(1) Lispの基本構造はリスト

(2) Lispは前置形式

(3) ISLispの関数一覧

(4) 関数定義

(5) Lispのデータ構造: リスト

(参考) 関数名の謎1 car,cdr,nil
その他のリスト処理関数

(6) 変数と名前

(a) 変数の種類
(b) ISLispの変数
(注意)グローバル変数とダイナミック変数は使うな!
(参考)変態な名前

(7) 配列

(a) ベクター vector
(b) アレイ array
(c) 文字列 string

(8) プログラム制御

(a) 分岐
(b) 繰り返し
(c) その他の制御構造
(d) 繰り返しは悪魔の所作?

(9) 代入

(a) 変数代入 setq
(b) 汎用代入 setf
(c) 破壊的代入は悪魔の所業

(10) オブジェクトシステム - オブジェクト指向機能

(a) クラス定義
(b) スロット変数のアクセス
(c) オブジェクト指向の罪と罰

(11) ジェネリック関数 - 続・オブジェクト指向機能

(a) 単体のジェネリック関数
(b) (参考) 多重継承

(12) 継承

(a) 準備
(b) サブクラスの定義
(c) サブクラスのインスタンス生成
(d) 継承による実行
(e) 継承の評価

(13) 関数

(a) 関数定義
(b) 関数呼び出し
(c) 関数はファーストクラスオブジェクト

(14) マクロ

(a) マクロ定義
(b) マクロ略記法(バッククォート記法)
(c) マクロの功罪

(15) 属性リスト

(a) 属性リストの設定
(b) 属性リストのアクセス
(c) 属性リストは万能
(d) (参考)Lisp-1でも大丈夫

(16) コマンド

(a) OK! ISLispのコマンド関数一覧
(c) (参考)エラーブレーク
(d) その他の関数


いいなと思ったら応援しよう!

五味弘
よろしければサポートをお願いします!