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

KMRCLを眺める IS-CHAR-WHITESPACE (102)

| 14:19 | KMRCLを眺める IS-CHAR-WHITESPACE (102) - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める IS-CHAR-WHITESPACE (102) - わだばLisperになる

今回はKMRCLのstrings.lispから、IS-CHAR-WHITESPACEです。

動作は、

(MAP 'LIST #'KL:IS-CHAR-WHITESPACE 
     "    


	")
;⇒ (T T T T T T T T)

というところで定義は、

(defvar *whitespace-chars* '(#\space #\tab #\return #\linefeed
                             #+allegro #\%space
                             #+lispworks #\No-Break-Space))

(defun is-char-whitespace (c)
  (declare (character c) (optimize (speed 3) (safety 0)))
  (or (char= c #\Space) (char= c #\Tab) (char= c #\Return)
      (char= c #\Linefeed)
      #+allegro (char= c #\%space)
      #+lispworks (char= c #\No-Break-Space)))

となっています。

他のライブラリでは、 *WHITESPACE-CHARS* のような物は定数にすることが多い気がしますが、ここでは普通の大域変数になっています。

今回もSBCL等の場合、最適化によって、

(KL:IS-CHAR-WHITESPACE " ")
;⇒ NIL

みたいな動作をします。(safety 0)恐るべし。