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-01-29

KMRCLを眺める (76) WRITE-UTIME-HMS-STREAM

| 08:19 | KMRCLを眺める (76) WRITE-UTIME-HMS-STREAM - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める (76) WRITE-UTIME-HMS-STREAM - わだばLisperになる

今回はKMRCLのio.lisp中からWRITE-UTIME-HMS-STREAMです。

定義を眺めてみると

(defun write-utime-hms-stream (utime stream &optional utc-offset)
  (with-utime-decoding-utc-offset (utime utc-offset)
    (write-string (aref +datetime-number-strings+ hour) stream)
    (write-char #\: stream)
    (write-string (aref +datetime-number-strings+ minute) stream)
    (write-char #\: stream)
    (write-string (aref +datetime-number-strings+ second) stream)))

となっています。

この中の+DATETIME-NUMBER-STRINGS+ですが、

(defvar +datetime-number-strings+
  (make-array 61 :adjustable nil :element-type 'string :fill-pointer nil
              :initial-contents
              '("00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11"
                "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23"
                "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35"
                "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47"
                "48" "49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59"
                "60")))

となっています。

なんでこんなものを定義するのかなと最初は思いましたが、WRITE-UTIME-HMS-STREAMの実装を眺めるに、必要な都度、数字→文字の変換をするのは効率が悪い、ということなのでしょうか。

動作は、

(WITH-OUTPUT-TO-STRING (OUT)
  (WRITE-UTIME-HMS-STREAM (GET-UNIVERSAL-TIME) OUT))
;⇒ "8:30:10"

というところです。

ゲスト



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