SRFI-39はパラメタです。CLで言うところのスペシャル変数と同様のもので、Schemeでダイナミックスコープを可能にするものです。R7RSで標準にも採用されているので特にこれといった説明も必要ない気がしないでもないですが、簡単な使い方を見てみましょう。
(import (rnrs) (srfi :39)) (define *foo* (make-parameter 10)) (define (foo) (display (*foo*)) (newline)) (parameterize ((*foo* 100)) (foo)) ;; prints 100マクロ
parameterize
は変数部分が定義されたパラメタであることを除けばlet
と同じ構文です。また、make-parameter
はオプション引数としてconverterを取ることが可能です。こんな感じ。(define *foo* (make-parameter 10 (lambda (x) (* x x)))) (*foo*) ;; -> 100 (*foo* 20) (*foo*) ;; -> 400converterは設定された値を変換します。与えられなければ設定された値がそのまま使われます。上記のように使う場合は少なくとも型チェックを入れるべきですが、ここでは手を抜いてます。
今回はSRFI-39を紹介しました。
No comments:
Post a Comment