blob: 72d1f9ac7b7cf03fbcff8149580357d4acc2b4cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
(in-package :ouat)
#+nil
(defvar command-list
'(("a" . (ana 1 nil))
("d" . (defi 1 nil))
("h" . (help 0 nil))
("l" . (by-length 0 t))
("p" . (seven-prob 1 nil))
("q" . (quit-words 0 nil))))
(defvar *command-list*
'(("a" . ana)
("b" . build)
("q" . quit-words)
("w" . woadwage)))
(defun quit-words (arg)
(declare (ignore arg))
:QUIT)
(defun woadwage (arg)
(anagram arg 2))
(defun build (arg)
(anagram arg 1 *default-dictionary* '(:WORDS) t t))
(defun build-num (arg)
(anagram arg 1 *default-dictionary* '(:NUMBER-OF-ANSWERS) t t))
(defun num-anagrams (arg)
(anagram arg 1 *default-dictionary* '(:NUMBER-OF-ANSWERS)))
(defun handle (query)
(when (< 1 (length (first query)))
(push "a" query))
(let ((command (first query))
(arg (second query))
(subquery (cddr query)))
(declare (ignore subquery))
(apply (cdr (assoc command *command-list* :test 'equal)) (list arg))))
(defun words ()
(loop
do
(let ((result (handle (string-tokens (read-line)))))
(when (eq result :QUIT) (return))
(format t "~a~%" result)))
(values))
|