Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2009-04-26

Getting Started in *LISP (23)

| 10:46 | Getting Started in *LISP (23) - わだばLisperになる を含むブックマーク はてなブックマーク - Getting Started in *LISP (23) - わだばLisperになる

LingrのCL部屋でスペシャル変数とマルチスレッド問題の話題のお蔭で、すっかり忘れていた*Lispのことを思い出しました。

3ヶ月ほど間が空いてしまいましたが、*Lisp入門の23回目です。

3.6.6 Two Important VP Set Variables

どのVPセットが現在選択されていて、どれがデフォルトのVPセットになっているかを確認したい、ということは良くあることなので、その為の大域変数が用意されているとのこと。

まず、*default-vp-set* は、*cold-bootした時に設定されたVPセットが束縛されている

(*cold-boot :initial-dimensions '(128 128))

*default-vp-set*
;=> #<VP-SET Name: *DEFAULT-VP-SET*, Dimensions (128 128), Geometry-id: 2>

*default-vp-set* は *cold-boot を実行する度に設定されるが、逆にそれ以外の方法では変化しない。

対して、 *current-vp-set* は現在選択されているVPセットの内容に束縛されている。

*current-vp-set*
;=> #<VP-SET Name: *DEFAULT-VP-SET*, Dimensions (128 128), Geometry-id: 2>

(def-vp-set big-square ' (256 256)
  :*defvars ' ((big-square-pvar 1)
               (another-square-pvar (random!! 20))))

;; VPセットをbig-squareに設定
(set-vp-set big-square)

*current-vp-set*
;=> #<VP-SET Name: BIG-SQUARE, Dimensions (256 256), Geometry-id: 3>

ということで上記を利用して現在のVPセットがデフォルトのVPセットかどうかを調べる関数が書ける

(defun default-p ()
  (eq *current-vp-set* *default-vp-set*))

試してみる

(set-vp-set big-square)
;=> #<VP-SET Name: BIG-SQUARE, Dimensions (256 256), Geometry-id: 3>
(default-p)
;=> NIL

(set-vp-set *default-vp-set*)
;=> #<VP-SET Name: *DEFAULT-VP-SET*, Dimensions (128 128), Geometry-id: 2>

(default-p)
;=> T

VPセットは*Lispのツールのうちでも高度なものなので、ここではこれ以上詳細に立ち入らず、後の6.4章で詳細に解説するとのこと。

次回、3.7から再開

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20090426