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 |

2010-07-06

KMRCLを眺める(172) ENSURE-KEYWORD-DEFAULT-CASE

| 22:12 | KMRCLを眺める(172) ENSURE-KEYWORD-DEFAULT-CASE - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(172) ENSURE-KEYWORD-DEFAULT-CASE - わだばLisperになる

今回は、KMRCLのsymbols.lispからENSURE-KEYWORD-DEFAULT-CASEです。

大文字小文字の違いをKMRCL内で調べてある稼働中の処理系のREADTABLE-CASEの状況に合せてキーワードシンボルを作成します。

動作は、

(LET ((*READTABLE* (COPY-READTABLE)))
  (EVAL
   (READ-FROM-STRING "(kl:ensure-keyword-default-case 'foo)")))
;⇒ :FOO

(LET ((*READTABLE* (COPY-READTABLE)))
  (SETF (READTABLE-CASE *READTABLE*) :PRESERVE)
  (EVAL
   (READ-FROM-STRING "(KL:ENSURE-KEYWORD-DEFAULT-CASE 'foo)")))
;⇒ :FOO

というところ。

:PRESERVEにしていますが、上のテストの*READTABLE*は標準の状態なので全部大文字にされています。

定義は、

(defun ensure-keyword-default-case (desig)
  (nth-value 0 (intern (string-default-case
                        (symbol-name (ensure-keyword desig))) :keyword)))

となっています。