src/pset-impl.lisp: Convert strings to booleans using a hash-table.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 12 Aug 2019 10:12:55 +0000 (11:12 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 12 Aug 2019 11:40:24 +0000 (12:40 +0100)
src/pset-impl.lisp

index 338306a..f5650cf 100644 (file)
                 (error "Symbol `~A' not external in package `~A'"
                        name (package-name package)))))))))
 
-(let ((truish '("true" "t" "yes" "on" "verily"))
-      (falsish '("false" "nil" "no" "off" "nowise")))
+(let ((truth-map (make-hash-table :test #'equalp)))
+  (dolist (string '("true" "t" "yes" "on" "verily"))
+    (setf (gethash string truth-map) t))
+  (dolist (string '("false" "nil" "no" "off" "nowise"))
+    (setf (gethash string truth-map) nil))
   (defun truishp (string)
     "Convert STRING to a boolean."
-    (cond ((member string truish :test #'string-equal) t)
-         ((member string falsish :test #'string-equal) nil)
-         (t (error "Unrecognized boolean value `~A'" string)))))
+    (multiple-value-bind (val foundp) (gethash string truth-map)
+      (if foundp val
+         (error "Unrecognized boolean value `~A'" string)))))
 
 ;;;--------------------------------------------------------------------------
 ;;; Property representation.