Lisp函数在菜单函数中使用时返回NIL,但可以正常工作

问题描述 投票:0回答: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                                                                          
)  

目前,我仅致力于使名称搜索生效,菜单的其余部分只是占位符。当我自己运行“输入名称”(使用搜索名称)时,它将返回正确的结果。当我尝试搜索菜单中的第一个选项(也运行“输入名称”)时,它返回NIL。我想知道为什么当我单独运行它时可以运行,而与该菜单一起使用时却不能运行。如果有人需要任何其他信息,请随时询问。我会尽力提供它。另外,我是初学者,所以请原谅我。

lisp common-lisp clisp slime abcl
1个回答
0
投票

当调用input-name时,您正在传递符号作为参数。但是,prompt-read返回一个字符串,这就是传递给input-name的内容。一种可能的解决方案是使用string-equal而不是equal中的search-name,并确保*db*包含字符串而不包含符号。

© www.soinside.com 2019 - 2024. All rights reserved.