学校用に書いている小さなデータベース プログラムをクエリする関数を書きました。この関数は名前で検索します。関数を単独で実行すると、機能します。メニュー内で実行すると機能しません (NIL が返されます)。関連するすべてを次に示します。
(defun prompt-read (prompt)
(format *query-io* "~a: " prompt)
(force-output *query-io*)
(read-line *query-io*))
(defun search-name (name)
(remove-if-not
#'(lambda (cat) (equal (getf cat :name) name)) *db*))
(defun input-name ()
(search-name
(prompt-read "Name")))
(defun search-menu ()
(print "1) Search Name")
(print "2) Search Color")
(print "3) Search Min. Weight")
(print "4) Search Min. Experience")
(print "5) Search Min. Length")
(setf choose (read))
(cond ((= choose 1)(input-name))
((= choose 2)(print "Color"))
((= choose 3)(print "Weight"))
((= choose 4)(print "XP"))
((= choose 5)(print "Color"))
)
NIL
)
現在、名前検索を機能させる作業のみを行っており、メニューの残りの部分は単なるプレースホルダーです。「入力名」(検索名を使用)を単独で実行すると、正しい結果が返されます。検索メニュー (「input-name」も実行) から最初のオプションを試すと、NIL が返されます。単独で実行すると機能するのに、そのメニューで使用すると機能しないのはなぜだろうか。他の情報が必要な場合は、お気軽にお問い合わせください。提供できるよう頑張ります。また、初心者ですのでよろしくお願いします。