Simple database: Difference between revisions

→‎{{header|Common Lisp}}: only handle numeric dates as per recommendation from #lisp
(→‎{{header|Common Lisp}}: improve file handling)
(→‎{{header|Common Lisp}}: only handle numeric dates as per recommendation from #lisp)
Line 45:
 
(defun print-episode (episode)
(format t " ~30a ~@[~a-~]~a~40T~@[~a~]~@[ ~70T(~{~a~^.~})~]~@[ (~{~a~^ ~})~]~%"
(get-value 'series episode)
(get-value 'season episode)
(get-value 'episode episode)
(get-value 'title episode)
(reverse (get-value 'date episode) )
(get-value 'tags episode)))
 
Line 65:
(cond ((endp database) nil)
(T (append (get-value 'episodes (cdar database)) (get-all (cdr database))))))
 
(defun cal->int (cal)
(cond ((integerp cal) cal)
(T (get-value cal '(('jan . 1) ('feb . 2) ('mar . 3) ('apr . 4)
('may . 5) ('jun . 6) ('jul . 7) ('aug . 8)
('sep . 9) ('oct . 10) ('nov . 11) ('dec . 12))))))
 
(defun compare-date (a b)
(cond ((not (and (listp a) (listp b))) nilt)
((null a) (not (null b)) nil)
((null= b(first a) nil(first b))
((= (cal->int (first a)) (cal->int (first b)))
(compare-date (rest a) (rest b)))
(t (< (cal->int (first a)) (cal->int (first b))))))
 
(defun compare-by-date (a b)
(compare-date (reverse (get-value 'date a)) (reverse (get-value 'date b))))
 
(defun prompt-read (prompt &optional default)
Line 105 ⟶ 98:
 
(defun parse-date (date)
(reverse (mapcar #'parse-integer (split "." date))))
 
(defun parse-tags (tags)
Line 182 ⟶ 175:
(defun watch-add ()
(let* ((series (loop thereis (get-or-add-series (prompt-read "Series") *db*)))
;(loop until (get-or-add-series (prompt-read "Series") *db*) return it))
(episodes (get-value 'episodes series))
(episode (prompt-for-episode (car episodes))))
Anonymous user