mokeheheのScheme日記

ツッコミ、添削大歓迎です。いろいろ教えてください。

2008-01-03

[] Practical Common Lisp第6章 変数

http://gigamonkeys.com/book/variables.html

変数の基礎
レキシカル変数クロージャ
(let ((count 0)) #'(lambda () (setf count (1+ count))))
動的変数(特殊変数
  • defvar, または defparameter
  • 慣習的に名前を *...* とする
  • defparameter は常に値のセットを行う、defvar は変数が未定義の場合だけ
  • 実際には、defvar を使うべき
  • defvar や defparameter で定義した変数は特殊となり、動的変数になる。名前で見分けないと酷い目にあう。

よくわからん

定数
  • defconstant
  • 慣習的に名前は +...+
  • すでに定義済みの定数を違う値でもう一度定義しても値は変わらない
代入
  • setfマクロ
    • 格納先が変数の場合:setq 特殊オペレータ
  • ちょっとこれは理解不能だ~
(defun foo (x) (setf x 10))

(let ((y 20))
  (foo y)     ; foo の結果はyには反映されず
  (print y))  ; => 20

setf とか setq の、f とか q ってなんなのさ?

一般化された代入
  • 配列ハッシュテーブル、リスト、ユーザ定義データ構造も値を保持できる
  • どれも setf で値をセット可能
他の方法
  • incf, decf
  • push, pop, pushnew
  • (rotatef a b)
    • (let ( (tmp a)) (setf a b b tmp) nil)
  • (shiftf a b 10)
    • (let ( (tmp a)) (setf a b b 10) tmp)
トラックバック - http://sicp.g.hatena.ne.jp/mokehehe/20080103