このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

letrecとwhere

letrecはものすごく役立つ概念なんですが、書き方で悩みます。

letrecという名前の構成素を持つプログラミング言語というとLisp系、なかでもSchemeが挙げられるでしょう。Schemeには(たぶん他のLispでも)let, let*, letrec, letrec* とlet系の構文が4つもあります(例えば、higeponさんの記事)。書いた順番に依存する let*, letrec* なんてものは要らないので、letとletrecが僕が欲しいものです。

毎度思うのですが、letとletrecって区別する必要があるんでしょうか? 要するに、いくつかの変数を同時に(順番に依存せずに)束縛することです。束縛に再帰があるときはletrecになります。しかし、再帰がない状況でletrecを使っても何も悪いことは起きません。だったら、letrecだけあればいいのじゃないかと。いっそのこと、letにletrecの機能を含めてしまえば、3文字短いキーワード"let"だけで済みます。

というわけで、「letrec機能を持ったlet」だけがいいな、と。
賛同してくれる人がいるかどうかわかりませんが。

再帰を許すletの意味論は不動点になります。このことから、fixpointなんて露骨なキーワードを使う例もありますがどうなんでしょう? 分かりにくいと思いますね。不動点演算子ギリシャ文字μが使われるのでmuは? もっと分かりにくい!

「let 束縛 in 式」の順番を変えた書き方に「式 where 束縛」があります。どっちも同じ意味で書き方の違いだけです。それじゃwhereなんて要らないのか、というと、letよりwhereが便利な状況もあります。で、僕はよく知らないのですが(誰か教えてぇ)、whererec ってないのでしょうか? letとletrecがあるなら、whereとwhererecがありそうですが、whererecって見たことない。

それと、なんか気になってしょうがないのは、whereが後置されるスタイルだと“心の準備”ができない気がするんですよ。「この式に関する説明は後(where以降)にあります」という目印を先に出して欲しいわけです。で、先頭に来るキーワードをいくつか考えてみました。

  • in 式 where 束縛 (let in の in)
  • given 式 where 束縛 (You are given)
  • gotten 式 where 束縛 (You have gotten)
  • pose 式 where 束縛 (とりあえず提示、詳細後述)
  • its 式 where 束縛 (it's)

どれもイマイチ感が…

結論になってませんが:

  • 再帰を許すletがあればそれでよい。
  • 束縛を後に書くwhere構文もあったほうが便利。
  • whereが後置されることを示す目印が先頭に欲しい。