]> git.eshelyaron.com Git - emacs.git/commitdiff
Simpler filter implementation
authorMark Oteiza <mvoteiza@udel.edu>
Mon, 20 Mar 2017 02:21:03 +0000 (22:21 -0400)
committerMark Oteiza <mvoteiza@udel.edu>
Mon, 20 Mar 2017 02:21:03 +0000 (22:21 -0400)
* lisp/play/dunnet.el (dun-endgame-question): Get or set
dun-endgame-questions one time only.  Use dolist and an index to
prune the list.

lisp/play/dunnet.el

index 677946262c5b0e3d449ff57e941e244a61934d24..8f013bb09f25b5f9c61896d166ec9cda5d873950 100644 (file)
@@ -2106,28 +2106,23 @@ for a moment, then straighten yourself up.\n")
        (dun-mprincl "That answer is incorrect.")))))
 
 (defun dun-endgame-question ()
-(if (not dun-endgame-questions)
-    (progn
-      (dun-mprincl "Your question is:")
-      (dun-mprincl "No more questions, just do ‘answer foo’.")
-      (setq dun-correct-answer '("foo")))
-  (let (which i newques)
-    (setq i 0)
-    (setq newques nil)
-    (setq which (random (length dun-endgame-questions)))
-    (dun-mprincl "Your question is:")
-    (dun-mprincl (setq dun-endgame-question (car
-                                            (nth which
-                                                 dun-endgame-questions))))
-    (setq dun-correct-answer (cdr (nth which dun-endgame-questions)))
-    (while (< i which)
-      (setq newques (append newques (list (nth i dun-endgame-questions))))
-      (setq i (1+ i)))
-    (setq i (1+ which))
-    (while (< i (length dun-endgame-questions))
-      (setq newques (append newques (list (nth i dun-endgame-questions))))
-      (setq i (1+ i)))
-    (setq dun-endgame-questions newques))))
+  (let ((questions dun-endgame-questions))
+    (if (null questions)
+        (progn
+          (dun-mprincl "Your question is:")
+          (dun-mprincl "No more questions, just do ‘answer foo’.")
+          (setq dun-correct-answer '("foo")))
+      (let* ((which (random (length questions)))
+             (question (nth which questions)))
+        (dun-mprincl "Your question is:")
+        (dun-mprincl (setq dun-endgame-question (car question)))
+        (setq dun-correct-answer (cdr question))
+        (let ((i 0) res)
+          (dolist (q questions)
+            (when (/= i which)
+              (push q res))
+            (setq i (1+ i)))
+          (setq dun-endgame-questions (nreverse res)))))))
 
 (defun dun-power (_args)
   (if (not (= dun-current-room pc-area))