Scheme で定数定義
define がそろそろ長くて面倒になってきたので (遅いですか?)、こういうマクロを作ってみました。
(define-syntax set (syntax-rules () ((set id x) (define id x))))
これならタイプするのも簡単です。
Racket であれば
(define-syntax set (make-rename-transformer #'define))
で define のエイリアスを作ることも可能なんですが、変数定義用の限定版ということで、上のでも良いかなと思います。
発展形として、set で導入された id を再定義できなくする方法も考えてみました。
(define-syntax set (syntax-rules () ((set id e) (begin (define id~ e) (define-syntax id (syntax-id-rules (set!) ((set! id _) (error 'id "is not modifiable.")) ((id . es) (id~ . es)) (id id~)))))))
> (set x 1) > x 1 > (set! x 2) x: is not modifiable.
syntax-id-rules 便利!