バリケンのRuby日記 RSSフィード

2008-03-18

[] 変数への代入  変数への代入 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  変数への代入 - バリケンのRuby日記  変数への代入 - バリケンのRuby日記 のブックマークコメント

今日は、Lispで変数への代入をやってみようと思うよ。

ちなみに、以前「Rubyの「変数」再考」というエントリを書いたけど、Lispの場合も同様に「変数とは、ある値に便宜的に名前(ラベル)をつけたもの」という考え方でいいみたい。

変数への代入

Lispでは、「(setq 変数名 値)」で、値を変数に代入できるよ。たとえば「(setq x 1)」と書けば、変数xに1が代入されるよ。

[1]> (setq x 1)
1
[2]>

そして、その変数名を評価すると、その変数に代入されている値を参照できるよ。

[2]> x
1
[3]>

関数の引数の中に書けば、引数が評価されてから関数が実行されるみたい。だから「(+ x 2)」と書くと、

[3]> (+ x 2)
3
[4]>

まずxが評価されるとさっき代入した1が戻るから「(+ 1 2)」となり、それが評価されて3が返ってくるんだね。

Ruby同様、再代入、つまり「ラベルの張り替え」はできるかな?「1+」という関数(ちょっとややこしいけど、「1+」は関数の名前だよ)を使うと引数を1増加した値が返るみたいだから、それで試してみるね。

[4]> (setq x (1+ x))
2
[5]> x
2
[6]>

これは、まず「(1+ x)」が評価されて2となるから「(setq x 2)」となり、それが評価されてxに2が再代入されているんだね。だから、最終的にはxに2が代入された状態になるみたい。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20080318