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-10-04

VALUESとSYMBOL-FUNCTIONとSETFの組合せ

| 00:23 | VALUESとSYMBOL-FUNCTIONとSETFの組合せ - わだばLisperになる を含むブックマーク はてなブックマーク - VALUESとSYMBOL-FUNCTIONとSETFの組合せ - わだばLisperになる

変数を共有して関数を定義したい場合など

(LET ((X 0))
  (DEFUN UP () (INCF X))
  (DEFUN DOWN () (DECF X))
  (DEFUN VALUE () X))

;; 実行例
(LIST (UP)
      (DOWN)
      (DOWN)
      (DOWN)
      (VALUE))
;⇒ (-1 -2 -3 -4 -4)

という風に書いたりしますが、

(SETF (VALUES (SYMBOL-FUNCTION 'UP)
              (SYMBOL-FUNCTION 'DOWN)
              (SYMBOL-FUNCTION 'VALUE))
      (LET ((X 0))
        (VALUES (LAMBDA () (INCF X))
                (LAMBDA () (DECF X))
                (LAMBDA () X))))

とも書けるみたいなのでメモ。冗長なのであまり意味がないかも…。

ゲスト



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