阿房峠

tunaguinfoのブログ

再帰

先日からLand of Lispを読み進めている。目的は再帰とlambdaの理解なのだけど最初に出てきた再帰の式だけでも???が浮かんで前に進まない。

 

というわけで、わからないことはGoogle先生に聴くとこにした。

lisp 再帰 - 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氏の記事の翻訳が多数。