日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

Clojure 界隈での高階関数がらみのグチ

外部ライブラリを色々使い出して最近ふつふつ思うのが、どーも高階関数が絡んだ時の説明がイマイ チな事がチラホラあるような。ここで言ってるのはさすがに今更高階関数そのものの説明してくれと 言ってるわけではなく、API として説明不足と言うか。個人的には大きく 2 パターンあると思って る。

引数になる関数へ渡すデータがこちらで指定できる場合

普通にコード内で高階関数使う時はこっち。標準 API の map とかその類。 この時に必要な説明は

  • 引数で関数を適用した結果どんなデータが返されるか
  • 引数で渡した関数への引数はどう渡されるのか(ああややこしいw)

前者の説明まではあって、後者の説明が抜けてる事がちょくちょくある。それぞれ説明してもらわな いと自分の記述ミスじゃない部分で clojure.lang.ArityException 出しながらトライアンドエラー する手間が増えてちょっとイヤだ。

引数になる関数へ渡すデータがこちらで指定できない場合

渡されるデータはライブラリで(少なくとも場所やフォーマットとしては)決まってて、設定ファイル に関数を記述する場合。こちらも結局 何が データとして渡されてくるのかの説明が無い事とま た困ったことになる。まずどんなデータ渡されてくるんだろうと println や spit 入れてみたりす る必要が出てしまう。設定として関数渡せて柔軟になりますぜ、と言うのは分かるんだけどね。

何というか高階関数使えるぜスゲーで満足してないで、自分が高階関数作って API 公開した時はこ の辺りのドキュメントをちゃんとしたいと思っただけのグチでした。

core API はさすがにちゃんと書かれてる。他の lisp 界隈もこんなもんだったっけかなあ?