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

KMRCLを眺める(192) PRINT-FLOAT-UNITS

| 21:08 | KMRCLを眺める(192) PRINT-FLOAT-UNITS - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(192) PRINT-FLOAT-UNITS - わだばLisperになる

今回は、KMRCLのdatetime.lispからPRINT-FLOAT-UNITSです。

定義は、

(defun print-float-units (val unit)
  (cond
    ((< val 1d-6)
     (format t "~,2,9F nano~A" val unit))
    ((< val 1d-3)
     (format t "~,2,6F micro~A" val unit))
    ((< val 1)
     (format t "~,2,3F milli~A" val unit))
    ((> val 1d9)
     (format t "~,2,-9F giga~A" val unit))
    ((> val 1d6)
     (format t "~,2,-6F mega~A" val unit))
    ((> val 1d3)
     (format t "~,2,-3F kilo~A" val unit))
    (t
     (format t "~,2F ~A" val unit))))

こんな感じですが、なぜdatetime.lispで定義されているのか不思議なところ。

(WITH-OUTPUT-TO-STRING (*STANDARD-OUTPUT*)
  (KL:PRINT-FLOAT-UNITS 0.001234567890 "sec"))
;⇒ "1.23 millisec"

PRINT-FLOAT-UNITSを呼んでいる周りの関数を眺めるとどうもミリ秒とか、そういうのを表記するのに使いたい様子。