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-30

KMRCLを眺める(128) CHARHEX

| 00:58 | KMRCLを眺める(128) CHARHEX - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(128) CHARHEX - わだばLisperになる

今回はKMRCLのstrings.lispから、CHARHEXです。

動作は、

(KL:CHARHEX #\A)
;⇒ 10

というように前回のHEXCHARの逆の関数です。

定義は、

(defconstant* +char-code-lower-a+ (char-code #\a))
(defconstant* +char-code-upper-a+ (char-code #\A))
(defconstant* +char-code-0+ (char-code #\0))
(declaim (type fixnum +char-code-0+ +char-code-upper-a+
               +char-code-0))

(defun charhex (ch)
  "convert hex character to decimal"
  (let ((code (char-code (char-upcase ch))))
    (declare (fixnum ch))
    (if (>= code +char-code-upper-a+)
        (+ 10 (- code +char-code-upper-a+))
        (- code +char-code-0+))))

となっていて、今回は、DEFVARでなくDEFCONSTANT*になっています…