Coverage report: /Users/mohacker/src/yurrriq/land-of-lisp/src/wizard6.lisp

KindCoveredAll%
expression0106 0.0
branch010 0.0
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 (in-package :cl-user)
2
 (in-package :lol.wizard5)
3
 
4
 
5
 (defparameter *allowed-commands* '(look walk pickup inventory))
6
 
7
 
8
 (defun game-repl ()
9
   (let ((cmd (game-read)))
10
     (unless (eq (car cmd) 'quit)
11
       (game-print (game-eval cmd))
12
       (game-repl))))
13
 
14
 (export (find-symbol "GAME-REPL"))
15
 
16
 
17
 (defun game-read ()
18
   (let ((cmd (read-from-string (concatenate 'string "(" (read-line) ")"))))
19
     (flet ((quote-it (x) (list 'quote x)))
20
       (cons (car cmd) (mapcar #'quote-it (cdr cmd))))))
21
 
22
 
23
 (defun game-eval (sexp)
24
   (if (member (car sexp) *allowed-commands*)
25
       (eval sexp)
26
       '(i do not know that command.)))
27
 
28
 
29
 (defun tweak-text (lst caps lit)
30
   (when lst
31
     (let ((item (car lst))
32
           (rest (cdr lst)))
33
       (cond ((eql item #\space) (cons item (tweak-text rest caps lit)))
34
             ((member item '(#\! #\? #\.)) (cons item (tweak-text rest t lit)))
35
             ((eql item #\") (tweak-text rest caps (not lit)))
36
             (lit (cons item (tweak-text rest nil lit)))
37
             (caps (cons (char-upcase item) (tweak-text rest nil lit)))
38
             (t (cons (char-downcase item) (tweak-text rest nil nil)))))))
39
 
40
 
41
 (defun game-print (lst)
42
   (princ (coerce (tweak-text (coerce (string-trim "() "
43
                                                   (prin1-to-string lst))
44
                                      'list)
45
                              t
46
                              nil)
47
                  'string))
48
   (fresh-line))