再帰
先日からLand of Lispを読み進めている。目的は再帰とlambdaの理解なのだけど最初に出てきた再帰の式だけでも???が浮かんで前に進まない。
というわけで、わからないことはGoogle先生に聴くとこにした。
その中でも理解できそうなページは以下のもの。
7. 繰り返し
1. 初めに
今回は繰り返しについて説明します。繰り返しができれば、一通りプログラムを書くことができます。 繰り返しのための構文 do もありますが、一般に、Scheme は繰り返しのために再帰を使います。
2. 再帰再帰関数とは関数定義の中で自分自身を呼び出す関数です。 慣れないと奇妙な感じがしますが、慣れてしまえば、気にならなくなります。
https://www.shido.info/lisp/idx_scm.html もう一つのScheme入門(紫藤貴文さん)
https://www.shido.info/lisp/scheme7.html 7.繰り返し
再帰関数(初級) - 八発白中 (深町英太郎さん)
再帰関数(上級) - 八発白中 こちらには末尾再帰の例が載っている。
紫藤さんのページも平行して読んでいたのだけどそこまでは進んでいないし、深町さんのページもいつも検索には引っかかるのだけど読んでおらず、改めて本気で読まないと頭に入らないなあと。ただし、Land of Lispの例文にある (1+ hoge hoge)の(1+)の返り値はどこに溜め込むのは理解できてない。形としては、アンチョコとして使えるとは思うのだけど、他人には説明できないなあ。
アンチョコということでは、
lispの再帰関数,関数作成の練習 - Set::prototype
には数十もの再帰の例が載っていた。
さて、Land of Lispの訳者で役者(
川合史朗@Gaucheは、ハワイで俳優をしている|【Tech総研】
)の川合史郎さんのサイト
http://practical-scheme.net/index-j.html
)には、「なんでも再帰」(
http://practical-scheme.net/docs/tailcall-j.html
)というページでCのforとSchemeの再帰の比較をしている。これもまあ、全く理解できない。いつかわかる日が来るのだろうか?
それとPaul Graham氏の記事の翻訳が多数。