1

学校用に書いている小さなデータベース プログラムをクエリする関数を書きました。この関数は名前で検索します。関数を単独で実行すると、機能します。メニュー内で実行すると機能しません (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 が返されます。単独で実行すると機能するのに、そのメニューで使用すると機能しないのはなぜだろうか。他の情報が必要な場合は、お気軽にお問い合わせください。提供できるよう頑張ります。また、初心者ですのでよろしくお願いします。

4

3 に答える 3