Simple database: Difference between revisions

→‎{{header|Common Lisp}}: seperate season and episode, handle default values for each. (episode increments by 1)
(→‎{{header|Common Lisp}}: check for empty string before parsing)
(→‎{{header|Common Lisp}}: seperate season and episode, handle default values for each. (episode increments by 1))
Line 38:
<lang lisp>(defvar db nil)
 
(defun make-episode (&key series title season episode date tags)
`((series . ,series) (season . ,season) (episode . ,episode) (title . ,title) (date . ,date) (tags . ,tags)))
 
(defun print-episode (episode)
(format t " ~30a ~10a @[~a-~]~a~40T~a~@[ ~70T(~{~a~^.~})~]~@[ (~{~a~^ ~})~]~%"
(cdr (assoc 'series episode)) (cdr (assoc 'episode episode))
(cdr (assoc 'titleseason episode)) (cdr (assoc 'date episode)) (cdr (assoc 'tags episode))))
(cdr (assoc 'episode episode))
(cdr (assoc 'title episode))
(cdr (assoc 'date episode))
(cdr (assoc 'tags episode))))
 
(defun print-episodes (episodes series)
Line 65 ⟶ 69:
(compare-date (reverse (cdr (assoc 'date a))) (reverse (cdr (assoc 'date b)))))
 
(defun prompt-read (prompt &optional (default ""))
(format *query-io* "~a~@[ (~a)~]: " prompt default)
(force-output *query-io*)
(let ((answer (read-line *query-io*)))
Line 81 ⟶ 85:
 
(defun parse-tags (tags)
(when (and tags (string-not-equal "" tags)) (mapcar #'intern (split " " (string-upcase tags)))))
(mapcar #'intern (split " " (string-upcase tags)))))
 
(defun parse-number (number)
(if (stringp number) (parse-integer number :junk-allowed t) number))
 
(defun prompt-for-episode (&optional last)
Line 87 ⟶ 95:
:series (prompt-read "Series Title" (cdr (assoc 'series last)))
:title (prompt-read "Title")
:episodeseason (parse-number (prompt-read "EpisodeSeason" (cdr (assoc 'season last))))
:episode (parse-number (prompt-read "Episode" (1+ (cdr (assoc 'episode last)))))
:date (parse-date (prompt-read "Date watched"))
:tags (parse-tags (prompt-read "Tags"))))
Anonymous user