Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.90 KB | None | 0 0
  1. (defun PRINT-NL ()
  2.   (format t "~C" #\linefeed))
  3.  
  4. (defvar *reagent-table* (make-hash-table))
  5. (defstruct reagent
  6.   name
  7.   ingredients
  8.   notes
  9.   tags
  10.   )
  11.  
  12. (defvar TAG-BASE "Base")
  13.  
  14. (defmacro define-and-add-reagent (hashtable name ingredients notes tags)
  15.   "Defines a reagent and adds it to the specified hashtable."
  16.   `(setf (gethash ',name ,hashtable)
  17.     (make-reagent
  18.      :name ,name
  19.      :ingredients ,ingredients
  20.      :notes ,notes
  21.      :tags ,tags)))
  22.  
  23. (defun print-reagent-preset (reagent)
  24.   (defparameter *output* "")
  25.   (defparameter *separator* "=10;")
  26.   (PRINT-NL)
  27.   (format t "~{~A=10;~}" (reagent-ingredients reagent))
  28.   (PRINT-NL))
  29.  
  30. (defun find-reagent-by-name (name)
  31.   (with-hash-table-iterator (reagent-iterator *reagent-table*)
  32.     (loop
  33.      (multiple-value-bind (entry-p key value)
  34.          (reagent-iterator)
  35.        (if entry-p
  36.            (if (string= (reagent-name value) name)
  37.            (return-from find-reagent-by-name value))
  38.            (return)))))) ;Fell out of the loop = no matches.
  39.  
  40. (defun print-reagent (name)
  41.   (PRINT-NL)
  42.   (let ((reagent (find-reagent-by-name name)))
  43.     (if reagent ;we found a match!
  44.     (print reagent)
  45.     (format t "* No reagent found with name '~A'." name))))
  46.  
  47. (define-and-add-reagent *reagent-table* "Iron" (list) "Base chemical from the dispenser." (list TAG-BASE))
  48. (define-and-add-reagent *reagent-table* "Hydrogen" (list) "Base chemical from the dispenser." (list TAG-BASE))
  49. (define-and-add-reagent *reagent-table* "Oxygen" (list) "Base chemical from the dispenser." (list TAG-BASE))
  50. (define-and-add-reagent *reagent-table*
  51.     "Stabilizing Agent"
  52.   (list "Iron" "Hydrogen" "Oxygen")
  53.   "Keeps unstable chemicals stable. This does not work on everything."
  54.   (list))
  55.  
  56. (print-reagent "Iron")
  57. (print-reagent "Hydrogen")
  58. (print-reagent "Oxygen")
  59. (print-reagent "Stabilizing Agent")
  60. (print-reagent "Poo")
  61. (print-reagent-preset (find-reagent-by-name "Stabilizing Agent"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement