Schemeのdefineってレキシカルスコープじゃないよね

Schemeの場合

Schemeのdefineはset!と似た感じになるので、変数を2回defineすると最初の値が変わる。

(define x 1)
(define (f) x)
(define x 2)

(print (f)) ;; => 2

OCamlの場合

で、みんな大好きOCamlの場合は、二回letしても最初の値は変わらない。

let x = 1

let f _ = x

let x = 2

let _ =
  print_int (f ());; (* => 1 *)

で、何が問題なの?

ボクの作ってるScheme-abcはOCaml風のdefineを採用してるんだけど、これがわりとABCと相性悪いからどうしようかなぁ、と最近迷ってたりする。
できればOCaml風のdefineは維持したいんだけど、どうしようかなぁ・・。