星田さんの記事に対するコメント。
> transpose(※)
多分、星田さんのようなPython経験者だとzipって聞けば、
「ああ、あったあった。そう言えばそんなんあったわ。」
ってなると思う。複数のリストがあって、インデックス毎に纏めたリストに変換したい、って場合はzipだ。
とにかく、リスト操作でちと何か悩みそうになった場合には、まずはSRFI-1を覗こう。
良いユーティリティが発見出来る確率が高い。
> apply
特にココ!!カメタンさんがおっしゃってた()を外すってそういうことか!
そういう事、です(笑)。
なお、Schemeの実装上、applyはevalと並び立つ程の最重要関数だ。applyは高階関数なんだけどユーザーがプログラムして作る事は出来ない。Lispシステムの根幹に関わってる関数の1つ、って事になる。
SICPでも表紙からしてevalと同等なapplyの重要性を訴えかけている。
評価プロセスは二つの手続き: evalとapplyの間の相互作用として記述出来る.-- インタプリタのコアとは --
一般に、僕らがLispでプログラムを書く際、evalを直接使う事は推奨されない。evalを直接使うくらいならマクロを書く、ってのがセオリーだ。
一方、applyはどんなに使ってもO.K.だ。
そして「全てのソフトウェアはインタプリタあるいはその変種」と考えた時、applyの重要性が良く分かると思う。
※: 数学的には行列の転置作業の事。リストのインデックス毎に纏めて新しい行列を作る事は行列の行と列の要素を入れ替える事に等しい。