rangeのための略記法
30分プログラム、その223。rangeのための略記法をCamlp4で作ってみた。
1..3とrange 1 3を同じにしたかったのだけれど、(1 .. 3)にしないとできなかった。なにか解決法あるのかなぁ。
使い方
let (@@) f g = f g (* rangeをここで定義する必要がある *) let rec range a b = if a < b then a::(range (a+1) b) else [] let sum xs = List.fold_left (+) 0 xs let _ = print_int @@ sum (0 .. 10); print_newline ()
ソースコード
open Pcaml EXTEND expr: LEVEL "expr1" [[ e1 = expr; ".."; e2 = expr -> <:expr< range $e1$ $e2$>> ]]; END;;