OCaml vs Scheme


真面目に調べていないけれども、O’Caml と Scheme で微妙にスコープの範囲が違うらしい。O’Caml だと気軽に以下のようなコードを書きます。

let s n =
let n = n + 1 in
n

Scheme で同じようなことを以下のようにやってみます。

(define (s n)
(define n (+ n 1))
n)

Scheme の define は letrec なのかな。O’Caml でも以下のプログラムは動かないからね。

let s n =
let rec n = n + 1 in
n

便利だからついつい define を使ってしまうけれども、正しくは以下のように書くべきだったみたいです。

(define (s n)
(let ((n (+ n 1)))
n))

このミス、20世紀に何十回となくはまった気がするけれども、10年ぶりにはまりました。