LISP关联列表中按标题查找书籍失败,求排查问题
问题排查及修复方案
以下是你可能犯的几个常见错误,对应修复方式如下:
字段名拼写/格式错误:
确认查找时用的字段和alist里的完全一致——你定义的是:title和:autor(注意是autor而非author,如果是笔误会直接找不到),且关键字必须带冒号,不能写成title(不带冒号的符号和带冒号的关键字是不同对象)。比较函数不匹配:
Common Lisp的assoc默认用eql比较,而字符串内容比较需要用equal(eql只比对字符串地址,不比对内容)。如果你的书籍标题是字符串类型,必须显式指定比较规则:(defun buscar (target-title books) (assoc target-title books :key #'(lambda (book) (getf book :title)) :test #'equal))手动遍历逻辑错误:
如果是自己写循环遍历alist,要确保正确提取每个元素的:title字段并做比较:(defun buscar (target-title books) (loop for book in books when (equal (getf book :title) target-title) return book))字符串大小写问题:
字符串是大小写敏感的,查找时的目标字符串必须和alist中存储的标题完全一致(比如"1984"和"1984 "带空格、"Dune"和"dune"都会被视为不同内容)。
内容的提问来源于stack exchange,提问作者Jose A. Matarán
相关产品推荐
相关产品推荐

