Anonymous user
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 ~
(cdr (assoc 'series
(cdr (assoc '
(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
(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)))))
(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")
:
:episode (parse-number (prompt-read "Episode" (1+ (cdr (assoc 'episode last)))))
:date (parse-date (prompt-read "Date watched"))
:tags (parse-tags (prompt-read "Tags"))))
|