ついさっき、とあるプログラムを思いついたのでそのコーディングをしていた所、
便利なのに実装されていない*1関数を発見。
普通、map関数を複数リストで呼び出すと、同じインデックスのアイテム同士をprocedureで処理する。
この動作を拡張?して、「全てのリストの各単位に操作を行なう」関数を書いてみた。
実例を出せば、九九のリストを出力したいとき、(directmap * (iota 9) (iota 9))で処理できる関数。
大したコードではないけれども、メモを兼ねて。
(define directmap (lambda (proc L1 L2) (map (lambda (n) (map (lambda (m) (proc n m)) L2)) L1)))
ちなみに関数名であるdirectmapのdirectは、そもそも直積direct mapを出力させたかった(つまりprocが*だった)のが由来。
でもこれだと複数リストを処理できないので、あとでちょっと処理を追加する。