小编log*_*gon的帖子

SIMPLE-READER-ERROR ,非法尖锐的宏字符,子字符 #\< 没有为调度字符定义 #\#

在 David B. Lamkins 所著的《Successful Lisp》一书的第 4 章中,有一个简单的应用程序可以跟踪银行支票。

https://dept-info.labri.fr/~strandh/Teaching/MTP/Common/David-Lamkins/chapter04.html

最后,我们编写了一个宏来保存和恢复函数。当我执行 reader 函数并且要读取的值是哈希表时,就会出现问题。

保存和恢复功能的宏是:

(defmacro def-i/o (writer-name reader-name (&rest vars))
  (let ((file-name (gensym))
        (var (gensym))
        (stream (gensym)))
    `(progn
       (defun ,writer-name (,file-name)
         (with-open-file (,stream ,file-name
                                  :direction :output :if-exists :supersede)
           (dolist (,var (list ,@vars))
             (declare (special ,@vars))
             (print ,var ,stream))))
       (defun ,reader-name (,file-name)
         (with-open-file (,stream ,file-name
                                  :direction :input :if-does-not-exist :error)
           (dolist (,var ',vars)
             (set ,var (read ,stream)))))
       t)))
Run Code Online (Sandbox Code Playgroud)

这是我的哈希表以及发生了什么:

    (defvar *payees* (make-hash-table :test #'equal))

    (check-check 100.00 "Acme" "Rocket booster T-1000")

    CL-USER> *payees*
    #<HASH-TABLE …
Run Code Online (Sandbox Code Playgroud)

lisp macros hashtable common-lisp dispatch

1
推荐指数
1
解决办法
131
查看次数

标签 统计

common-lisp ×1

dispatch ×1

hashtable ×1

lisp ×1

macros ×1