Emacs 一个简单的lisp程序

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

我想写这个程序在列表中查找关键字。如果找到,则打印列表。但是错误发生了,我解决不了。请给我一些建议。我是lisp的新手

主程序是两个dolist(两个用于C)和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()

你注意到第二行的空格比第一行的长吗?这是因为它们不是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))))))