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-02-24

今日の発見

| 00:42 | 今日の発見 - わだばLisperになる を含むブックマーク はてなブックマーク - 今日の発見 - わだばLisperになる

LISPをみんなで勉強しよう! : 束縛されている?

を読んでいて、おおそういえば、

(boundp :foo)
;=> T

なんだね、という話をLingrのCommon Lisp部屋でしていたのですが、

じゃあ、他のセルはどうなんだろうということで試してみたところ

(fboundp :foo) ;=> NIL

(symbol-value :foo) ;=> FOO

(setf (symbol-plist :foo) 'foo)

(setf (get :foo 'foo) 3)
(get :foo 'foo);=> 3

(symbol-plist :foo) ;=> (FOO 3)

(setf (symbol-function :foo) (lambda (x) x))

(:foo 3) ;=> 3

(defun :bar (n)
  n)

(:bar 3) ;=> 3

(funcall #':bar 3)
;=> 3

(flet ((:quux (n) n)) (:quux 8))
;=> 8

あれ、普通に、:barみたいな関数が作れるじゃないですか!

ずっと知りませんでした。

:barは、keyword:barという関数を定義していることになるのですが、変数セルは変更できなくても他には値を格納できるんですね。

exportしなくても、どのパッケージからも使えたりするんですが、これは禁断の技なのでしょうか。