; ピリオドで分割された数字を合体させて比較する ; version 情報をリスト化 ; "341.14.56763" => (341 14 56763) (defun version-string-to-number-list (version-string) ; position item sequence &key from-end test test-not start end key => position (let ((c-prev (position #\. version-string)) (c-next (position #\. version-string :from-end t))) ; read-from-string string &optional eof-error-p eof-value &key start end preserve-whitespace ⇒ object, position (list (read-from-string version-string t nil :end c-prev) (read-from-string version-string t nil :start (1+ c-prev) :end c-next) (read-from-string version-string t nil :start (1+ c-next))))) ; リスト化された version 情報の大小比較 ; (32 13 5) > (15 131123 67732) (defun compare-number-list (v1 v2) (cond ((and (null v1) (null v2)) 'older) ((null v1) 'newer) ((null v2) 'older) ((< (car v1) (car v2)) 'newer) ((> (car v1) (car v2)) 'older) (t (compare-number-list (cdr v1) (cdr v2))))) (defun main () (let* ((v1 (version-string-to-number-list (read-line))) (v2 (version-string-to-number-list (read-line))) (ans (if (eq (compare-number-list v1 v2) 'older) "YES" "NO"))) (princ ans) (terpri))) (main)