[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
[R5RS] この形式はトップレベル (ローカルな束縛が無い状態) とローカルスコープがある状態とで 別の意味を持ちます。
トップレベルでは、この形式は変数variableに対するグローバルな束縛を定義します。 最初の形式では、expressionが評価され、その結果が変数variableの値となります。
(define x (+ 1 2)) x ⇒ 3 (define y (lambda (a) (* a 2))) (y 8) ⇒ 16 |
2番目の形式は手続きを定義するための構文的な修飾で、以下の形式と同じです。
(define (name . args) body …) ≡ (define name (lambda args body …)) |
このフォームがローカルスコープの中に現われた場合、ローカル変数の束縛となります。
begin
は新しいスコープを作らないことに注意してください(順次実行参照)。
begin
の中に現われるdefine
は、あたかもbegin
とそれを囲む
括弧が無いかのように振舞います。すなわち、以下の2つの形式は等価です。
(let ((x 0)) (begin (define (foo y) (+ x y))) (foo 3)) ≡ (let ((x 0)) (define (foo y) (+ x y)) (foo 3)) |
まずexprが評価されます。それは与えられたvarと同数の値を
返さなければなりません。続いて各値がvarに順に束縛されます。
srfi-11
- Let-valuesも参照してください。
(define-values (lo hi) (min&max 3 -1 15 2)) lo ⇒ -1 hi ⇒ 15 |
define
と同じように動作しますが、
コンパイラはvariableの値が今後変更されないものとして
最適化されたコードを生成します。
variableの値をset!
で変更しようとするとエラーとなります。
variableを再定義することは許されますが、警告が表示されます。
この形式はvariableのグローバルな束縛をmodule中に作成します。 moduleはモジュール名を表すシンボルか、モジュールオブジェクトで なければなりません。moduleがシンボルの場合、その名前を持つ モジュールが既に存在している必要があります。
expressionは現在のモジュール中で評価されます。
2番目の形式は次の形式の構文的修飾です。
(define-in-module module variable (lambda formals body …)) |
註: シンボルが現在のモジュール中で定義されているか(グローバルな束縛を持つか)
を調べるには、global-variable-bound?
が使えます
(モジュールイントロスペクション参照)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated by Shiro Kawai on November, 22 2009 using texi2html 1.78.