【发布时间】:2020-02-05 01:13:58
【问题描述】:
我编写了一个函数来查询我正在为学校编写的小型数据库程序。此函数按名称搜索。当我自己运行该功能时,它可以工作。当我在菜单中运行它时它不起作用(它返回 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。我想知道为什么当我单独运行它时它会起作用,但与该菜单一起使用时却不起作用。如果有人需要任何其他信息,请随时询问。我会尽力提供。另外,我是初学者,请见谅。
【问题讨论】:
-
我不明白这个问题。您可能需要向我们展示互动。就像函数
search-menu当前一样,它总是返回NIL,因为这是代码中明确显示的最后一个值——参见search-menu的倒数第二行。除了NIL,它怎么能返回任何东西? -
另外:变量
choose在您的代码中未定义。setf不定义变量 - 它只设置它们。 -
提示:尝试理解在函数中打印一些东西、从函数中返回值和打印评估结果之间的区别在 READ-EVEL-PRINT-LOOP 中.
标签: lisp common-lisp clisp slime abcl