Let("x", IntLit 1, Plus(IntLit 2, Times(Var "x", IntLit 3)))という式を、
let x = 1 in 2 + (x * 3)あるいは、さらに頑張って
let x = 1 in 2 + x * 3と印刷するというものである。括弧を常に印刷するなら、簡単であるが、 上記の2番目の印刷例のように、「括弧を省略しても意味がかわらない場合に は省略する」ということを実現するのは、かなり難しい。
どこまでやれば「きれい」かについては特に基準をもうけず、 各自の判断と工夫に任せる。 OCaml 処理系の出力と同程度になれば素晴しい。
なお、このような変換を行う関数は、 pretty printer と呼ぶ。また、 構文解析の逆の処理なので unparse という名称で呼ばれることもある。 つまり、理想的には、parse と「ちょうど逆」をやる関数を作りたい。
let f = (+) 10 in (f 20) + (f 30)という式を書くことができる。 同様に、他の演算子についても、演算子を括弧で囲うと、関数として使えるよ うに拡張せよ。
亀山幸義