Gaucheプログラミング(立読み版) > 文法 > 構文 > 束縛(bind) > 破壊的変更と副作用 > 単独の変数の破壊的変更


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

単独の変数の破壊的変更 応援する 

「ある値にすでに束縛されているシンボル」を変数(varialbe)と呼ぶならば、 Schemeではset!を使ってその値を破壊的に変更することができます。

例えば、シンボルnを数値0に束縛します。

 gosh> (define n 0)
 n
 gosh> n
 0

ここでnを使う手続きを書いてみましょう。

 gosh> (define (add-n x)
          (+ x n))
 add-n

これは引数にnの値を足すような手続きです。値をこの手続きに渡すと、

 gosh> (add-n 10)
 10
 gosh> (add-n 35)
 35

nを束縛している値は数の0なので渡された数がそのまま返されます。 ここでnを3に破壊的に変更してみます。

破壊的変更を行うにはset!という特殊形式を使います。 set!は手続きではありません。 特殊形式については「特殊形式」で説明します。

 gosh> n
 0
 gosh> (set! n 3)
 3
 gosh> n
 3

破壊的に変更したのでnの値が数の3に変わりました。 もう一度先ほど定義したadd-n手続きを適用してみましょう。

 gosh> (add-n 10)
 13
 gosh> (add-n 35)
 38

add-n手続きの振る舞いが変わりました。

Schemeの手続きは評価されたときの情報を持つということを「手続き型」で説明しました。 破壊的変更はその情報を変更できる唯一の方法です。


[Prev] [Next] [Up] [Contents][フレーム表示] [フレーム解除

このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation