Emacs 一个简单的lisp程序
我想写这个程序在列表中查找关键字。如果找到,则打印列表。但是错误发生了,我解决不了。请给我一些建议。我是lisp的新手 主程序是两个dolist(两个用于C)和find关键字列表(二维数组) 下面是调试信息Emacs 一个简单的lisp程序,emacs,lisp,elisp,Emacs,Lisp,Elisp,我想写这个程序在列表中查找关键字。如果找到,则打印列表。但是错误发生了,我解决不了。请给我一些建议。我是lisp的新手 主程序是两个dolist(两个用于C)和find关键字列表(二维数组) 下面是调试信息 Debugger entered--Lisp error: (void-variable ) (list "い" "イ" "i") (list (list "あ" "ア" "a") (list "い" "イ" "i")) (let ((result 0) (ka
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()
你注意到第二行的空格比第一行的长吗?这是因为它们不是ASCII空格,所以emacs不能将它们识别为空格。相反,emacs认为它们是变量名,所以它向您抱怨没有变量名“ " (因此void变量错误中的空格)。您似乎在寻找这一行:
;; 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程序员中有9950万人使用这种风格:
(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)可以显示括号的平衡对,并为您管理缩进
最后,缩进是你的主要视觉线索,关于什么和什么
代码中的
(结果0)
绑定是无用的,与外部目录中的结果
变量无关。这是罪魁祸首。谢谢:-)这些是假名而不是汉字。:)谢谢Kaz,你说得对。:)
;; 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)
(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))))))