OCamlの対話環境でreadlineが使えなくて不便だったので、rlwrapを使った話
OCamlの対話環境は readline を利用していないため、C-b や C-f や矢印キーでカーソルを移動したり、C-p で履歴をたどったりすることができない。
code:一度間違うと修正できなくて生きるのが辛い.ocaml
$ ocaml
OCaml version 4.10.0
# let fib n = if n < 2 then 1 else fib(n - 2) + fib(^B^B^B^B^B^[[D
(あばばばばばばばばb)
そんな時は、rlwrap を使うと良い。rlwrap を使うことで readline に対応してないコマンドを readline に対応させることができる。
rlwrap をインストール
$ brew install rlwrap
rlwrap を使ってみる
以下のようにして ocaml を呼び出す。
$ rlwrap ocaml
これで OCaml の対話環境の中でもカーソル移動(ctrl-f, ctrl-b)や入力履歴(ctrl-p, ctrl-n)を利用できる。
code:sh
$ rlwrap ocaml
OCaml version 4.10.0
# let fib n = if n < 2 then 1 else fib (n - 2) + fib (n - 1);;
Error: Unbound value fib
Hint: If this is a recursive definition,
you should add the 'rec' keyword on line 1
(再帰関数は let rec じゃなきゃダメだった。 C-p で履歴をたどって C-f と C-b でコマンドを修正)
# let rec fib n = if n < 2 then 1 else fib (n - 2) + fib (n - 1);;
val fib : int -> int = <fun>
# let rec fib n = if n < 2 then 1 else fib (n - 2) + fib (n - 1);;
val fib : int -> int = <fun>
# fib 10;;
- : int = 89
(あれ、fib(10) が55じゃない...。C-p で履歴をたどって再度修正)
# let rec fib n = if n <= 2 then 1 else fib (n - 2) + fib (n - 1);;
val fib : int -> int = <fun>
# fib 10;;
- : int = 55
#