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

KMRCLを眺める(196) DAY-OF-WEEK

| 22:05 | KMRCLを眺める(196) DAY-OF-WEEK - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(196) DAY-OF-WEEK - わだばLisperになる

今回は、KMRCLのdatetime.lispからDAY-OF-WEEKです。

曜日を求めるのには定番のツェラーの公式を利用するものです。

(defconstant* +zellers-adj+ #(0 3 2 5 0 3 5 1 4 6 2 4))

(defun day-of-week (year month day)
  "Day of week calculation using Zeller's Congruence.
Input: The year y, month m (1 ≤ m ≤ 12) and day d (1 ≤ d ≤ 31).
Output: n - the day of the week (Sunday = 0, Saturday = 6)."

  (when (< month 3)
    (decf year))
  (mod
   (+ year (floor year 4) (- (floor year 100)) (floor year 400)
      (aref +zellers-adj+ (1- month)) day)
   7))

動作は、

(STRING (CHAR "日月火水木金土" (KL:DAY-OF-WEEK 2010 8 30)))
;⇒ "月"

というところ