我想编写这个程序来在列表中查找关键字.如果找到则打印列表.但是错误发生了,我无法解决.请给我一些建议.我是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 "?")
Run Code Online (Sandbox Code Playgroud)
以下是调试信息
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()
Run Code Online (Sandbox Code Playgroud)
(list "?" "?" "a")
(list "?"?"?"?"i")
Run Code Online (Sandbox Code Playgroud)
你注意到第二行中的空格比第一行的空格长吗?那是因为它们不是ASCII空格,所以emacs不会将它们识别为空格.相反,emacs认为它们是变量名称,所以它向你抱怨没有名为""的变量(因此void-variable错误中的空格).
你似乎在寻找这个单线:
;; 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)
Run Code Online (Sandbox Code Playgroud)
您的代码格式非常糟糕.试试这种风格,世界上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))))))
Run Code Online (Sandbox Code Playgroud)
没有人写关于个别结束括号的评论; 太荒谬了!你把Lisp变成了Ada.
您的文本编辑器(毕竟是Emacs)可以显示平衡的括号对并为您管理缩进.
最后,缩进是关于什么与什么有关的主要视觉线索.
(result 0)
代码中的绑定是无用的,与result
外部的变量无关dolist
.
归档时间: |
|
查看次数: |
325 次 |
最近记录: |