Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun PRINT-NL ()
- (format t "~C" #\linefeed))
- (defvar *reagent-table* (make-hash-table))
- (defstruct reagent
- name
- ingredients
- notes
- tags
- )
- (defvar TAG-BASE "Base")
- (defmacro define-and-add-reagent (hashtable name ingredients notes tags)
- "Defines a reagent and adds it to the specified hashtable."
- `(setf (gethash ',name ,hashtable)
- (make-reagent
- :name ,name
- :ingredients ,ingredients
- :notes ,notes
- :tags ,tags)))
- (defun print-reagent-preset (reagent)
- (defparameter *output* "")
- (defparameter *separator* "=10;")
- (PRINT-NL)
- (format t "~{~A=10;~}" (reagent-ingredients reagent))
- (PRINT-NL))
- (defun find-reagent-by-name (name)
- (with-hash-table-iterator (reagent-iterator *reagent-table*)
- (loop
- (multiple-value-bind (entry-p key value)
- (reagent-iterator)
- (if entry-p
- (if (string= (reagent-name value) name)
- (return-from find-reagent-by-name value))
- (return)))))) ;Fell out of the loop = no matches.
- (defun print-reagent (name)
- (PRINT-NL)
- (let ((reagent (find-reagent-by-name name)))
- (if reagent ;we found a match!
- (print reagent)
- (format t "* No reagent found with name '~A'." name))))
- (define-and-add-reagent *reagent-table* "Iron" (list) "Base chemical from the dispenser." (list TAG-BASE))
- (define-and-add-reagent *reagent-table* "Hydrogen" (list) "Base chemical from the dispenser." (list TAG-BASE))
- (define-and-add-reagent *reagent-table* "Oxygen" (list) "Base chemical from the dispenser." (list TAG-BASE))
- (define-and-add-reagent *reagent-table*
- "Stabilizing Agent"
- (list "Iron" "Hydrogen" "Oxygen")
- "Keeps unstable chemicals stable. This does not work on everything."
- (list))
- (print-reagent "Iron")
- (print-reagent "Hydrogen")
- (print-reagent "Oxygen")
- (print-reagent "Stabilizing Agent")
- (print-reagent "Poo")
- (print-reagent-preset (find-reagent-by-name "Stabilizing Agent"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement