名前の周縁
なるほど,Haskell の foldl, foldr は,Common Lisp だと reduce で統一されていて,その代わり右からと左からの選択は optional arguments で行うのか.
畳み込み関数はLispの方が好きかな。
オプショナル引数で動作と初期値を指定できる。
CL-USER > (reduce #'- (loop for x from 1 to 5 collect x) :initial-value 0) -15 CL-USER > (reduce #'- '(1 2 3 4 5) :from-end t) 3わかりやすい例は
CL-USER > (reduce #'list '(1 2 3) :initial-value 0) (((0 1) 2) 3) CL-USER > (reduce #'list '(1 2 3) :initial-value 0 :from-end t) (1 (2 (3 0)))
んで,上の部分を読んでいてやっと気がついた.つまりあれだ.CUI コマンドのパラメータ (というかオプション)って optional arguments とか名前付き引数とかその辺だ.まったくもって気付くの遅すぎ.
PowerShell と名前付き引数
見直してみると『PowerShell で LINQ - NyaRuRuの日記』で自分でも似たようなことをやっていた.以下の xrepeat, xselect, xtakewhile は LINQ 風の自作コマンド.
# xrepeat はデフォルトでパイプライン完了時に Dispose を呼ぶ xrepeat {New-Object IO.StreamReader("z:\test.txt")} | xselect { $_.ReadLine() } | xtakewhile { $_ -ne $null }
# xrepeat に -suppressdispose を付けると Dispose 呼び出しを抑制する xrepeat {New-Object IO.StreamReader("z:\test.txt")} -suppressdispose | xselect { $_.ReadLine() } | xtakewhile { $_ -ne $null }
Random thoughts
- 例えば,cut という単一のコマンドは,「何かをカットする」という概念をシェアしつつ,オプションによって振る舞いを変えている.
- test というファイル名は危険
- ルール clean が定義されていれば,いつでもどこでも make clean.
- 困ったら --help を付けてみれば使い方ぐらい何か分かる
- configure という名前なら多分 configure.多態的 configure.
- そのオプション補完ぐらいやってみせるのが zsh.
- 拡張子は緩い型.
- wget のオプションの数を数えてみたら少なくとも 40 個以上あった
- CreateFont API には引数が 14 個もある
- Enumerable.Max は 22 通りもオーバーロードされている
- キーワード
適当に並べてみたが,これらのいくつかを組み合わせるだけで話のネタにはなりそうだ.まったくシンタックスは幅が広いね.奥が深いかどうかはどうだろね.