Как перечислить весь високосный год с 1800 в LISP? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть этот код ниже, который принимает один параметр и печатает весь список високосного года в обратном порядке.Как я могу сделать так, чтобы 1800 использовалось в качестве ввода по умолчанию и просто запускала команду (прыжок), чтобы перечислить все високосные годы с 1800-2018?

КОД:

(defun leap (q)

    (if (< q 1800)
        (RETURN-FROM leap nil)
    )

    (leap (- q 1))

    (if (leapyear q)
        (push q mylist)
    )
    mylist
)


(reverse(leap 2018))

1 Ответ

2 голосов
/ 16 апреля 2019

Я не могу полностью понять, что вы пытаетесь сделать, но:

(defun leapyearp (y)
  ;; is Y a leap year, as best we can tell?
  (= (nth-value 3 (decode-universal-time
                   (+ (encode-universal-time 0 0 0 28 2 y)
                      (* 60 60 24))))
     29))

(defun leapyears (&key (start 1800) (end (nth-value 5 (get-decoded-time))))
  ;; all the leap years in a range
  (loop for y from start to end
        if (leapyearp y) collect y))
...