我想编写此程序以在列表中查找关键字。如果找到则打印列表。但是错误发生了,我无法解决。请给我一些建议。我是lisp的新手。
主程序是两个dolist(两个用于C)并在列表列表中找到关键字(二维数组)。
(defun kanna_find (key)
(let (
(result 0)
(kanna-table (list
(list "あ" "ア" "a")
(list "い" "イ" "i")
)
) ;; End of kanna table
) ;; End of let var define
(dolist (result kanna-table)
(dolist (item result)
(if (string= item key)
(print result))
) ;; End of the second dolist
) ;; End of the first dolist
) ;; End of let
)
(kanna_find "あ")
以下是调试信息
Debugger entered--Lisp error: (void-variable )
(list "い" "イ" "i")
(list (list "あ" "ア" "a") (list "い" "イ" "i"))
(let ((result 0) (kanna-table ...)) (dolist (result kanna-table) (dolist ... ...)))
kanna_find("あ")
eval((kanna_find "あ"))
eval-last-sexp-1(nil)
eval-last-sexp(nil)
call-interactively(eval-last-sexp nil nil)
recursive-edit()
答案 0 :(得分:9)
(list "あ" "ア" "a")
(list "い" "イ" "i")
您是否注意到第二行中的空格如何比第一行的空格长?那是因为它们不是ASCII空格,所以emacs不会将它们识别为空格。相反,emacs认为它们是变量名,因此它向你抱怨没有名为“”的变量(因此空间变量错误中的空格)。
答案 1 :(得分:7)
你好像在寻找这个单行:
;; return a sublist tail of list-of-strings whose first element is string
;; or nil if string is not found
(member string list-of-strings)
您的代码格式非常糟糕。试试这种风格,世界上1亿左右的Lisp程序员使用了这种风格:
(defun kanji_find (key)
(let ((result 0)
(kanji-table (list (list "あ" "ア" "a")
(list "い" "イ" "i"))))
(dolist (result kanji-table)
(dolist (item result)
(if (string= item key)
(print result))))))
没有人写关于个别结束括号的评论;太荒谬了!你把Lisp变成了Ada。
您的文本编辑器(毕竟是Emacs)可以显示平衡的括号对并为您管理缩进。
最后,缩进是你的主要视觉线索。
代码中的(result 0)
绑定无用,与外部result
中的dolist
变量无关。