Shammer's Philosophy

My private adversaria

multiple-value-bindで取得した変数を無視する

ファイルのタイムスタンプを取得【その3】 - Shammerismで時間を取得する関数を書いた。multiple-value-bindの戻り値で実際は使用しないだろうと思われるが返される値を取捨選択する方法がわからないのでそのまま全部受け取っているが、実際は使用されない値なので以下のような警告が出る。

;Compiler warnings :
;   In GET-TIMESTAMP-AS-STRING: Unused lexical variable TIME-ZONE
;   In GET-TIMESTAMP-AS-STRING: Unused lexical variable DST-P

この警告は declare で無効にできることがわかった。以下のようにすることでこの警告は出なくなる。

? (defun get-timestamp-as-string (time)
  (let ((day-names '("Mon" "Tue" "Wed" "Thu" "Fri" "Sat" "Sun"))
        (mon-names '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")))
    (labels
        ((pad (n)
              (if (< (length (write-to-string n)) 2)
                  (concatenate 'string "0" (write-to-string n))
                (write-to-string n))))
      (multiple-value-bind
          (second minute hour date month year day-of-week dst-p time-zone)
          (decode-universal-time time)
	(declare (ignore dst-p time-zone))
        (concatenate 'string
                     "[" (nth day-of-week day-names) " " (nth (- month 1) mon-names) " " (pad date) " "
                     (pad hour) ":" (pad minute) ":" (pad second) " " (write-to-string year) "]")))))	       
GET-TIMESTAMP-AS-STRING
?