问题描述
我最近开始学习Common Lisp,并且发现我真的不知道如何在另一个函数中调用用户定义的函数。
我发现有时(funcall#'func ...)有效,有时(funcall func ...),具体取决于 func 作为参数传递给调用函数或在 labels 等内部定义。
那为什么要这样区分呢?以及何时使用#'以及何时不使用的通用规则吗?
一个示例是我编写的以下简短代码。请注意, get-next-token 和 reader-fun 函数的调用有所不同:
(defvar *end-of-file* (gensym "eof"))
(defun get-reader (reader-type)
(case reader-type (:char-reader #'read-char)
(:line-reader #'read-line)
(:exp-reader #'read)
(t (error "UnkNown reader-type argument"))))
(defun read-all (filename reader-type)
(let ((result '())
(token ""))
(labels ((get-next-token (reader-fun stream)
(funcall reader-fun stream nil *end-of-file*))
(read-loop (reader-fun)
(with-open-file (stream filename :direction :input)
(loop
(setq token (funcall #'get-next-token
reader-fun stream))
(if (eq token *end-of-file*)
(return (nreverse result))
(push token result))))))
(read-loop (get-reader reader-type)))))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)