無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

LISPをつつく3−値の評価。思わぬ効果が・・・

前回計算式をやったピヨッ♪となれば、 誰もが気になるのは「どうやって変数に値を代入するか?」だよね♪ だから今回は代入方法をつつくピヨ♪変数に値を代入するには特殊な関数を使用するピヨ♪


>( setq x 100 )
100

>( setq x 100 y 200 z 300 )
300

>x
100

>y
200

>z
300


見ての通りで、setqという特殊な関数を使用することにより変数に値を代入することが出来るピヨ♪しかも、一度に複数の変数に値を代入できる優れものピヨッ♪便利だよね♪でも、関数型言語の使い手は極力この関数の使用を避けるピヨね。これには深ーい理由があるピヨね。理屈では分かり難いから例題を見よう。


>( Foo x y )

>( setq x 100 )
100

>( Bar x q )


念の為言っておくけど上記の関数は架空のものだピヨ。ここで大事なのはsetqが前処理の結果を打ち消す事だピヨォ。この例だと、せっかく関数Fooで変数xを処理したのに、後のsetqで変数xは絶対に100になってしまうピヨぉ。次に重要なのは、( setq x 100 )の位置次第でプログラムの結果が変ってしまうという事ピヨ。このように代入文は副作用があるピヨ。だからLISPerは極力代入文を避けるんだ。代入文があると、並列にプログラムを実行できないしね。この手の話題は代入文有害説と呼ばれてかなり議論されているピヨ。気になった人はインターネットに旅立とう。
ちなみに、setqのような代入文は関数言語では評価すると表現するピヨ。覚えておこう。今回はこれにて終わり♪
別窓 | LISP | コメント:2 | トラックバック:0 | ∧top | under∨
<<OCamlをつつく12−バリアント型。潜在能力は未知数! | 無差別に技術をついばむ鳥 | 書籍をつつく55−Windowsダンプの極意。凄い本発見♪>>

この記事のコメント

ひとつ誤植を見つけました。

>このように代入文は福効果があるピヨ。

福効果→副効果

だと思います。
(漢字の意味では)

また
関数型はほとんど知らないのですが、
副効果でなく、副作用のほうが正しい用語のような気がします。

#私が知らないだけで、副効果という用語があるのなら問題は
#ないのですが、調べても見つからなかったので。
2008-11-16 Sun 20:22 | URL | 組木紙織 #GpEwlVdw[ 内容変更]
組木紙織 さん教えてくれて有難う♪
間違ったので直します。
2008-11-16 Sun 20:51 | URL | インドリ #-[ 内容変更]
∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |