当前位置 : 主页 > 网络推广 > seo >

lisp – 从CCL中检索(加载)ed源代码?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我用CCL调用(加载“code.lisp”),然后意外删除了code.lisp.有没有办法让我检索源代码? CCL在内存中有没有它? 这是一个非常特殊的功能.这里仅适用于Clozure CL.该代码无法在其他任何地方使
我用CCL调用(加载“code.lisp”),然后意外删除了code.lisp.有没有办法让我检索源代码? CCL在内存中有没有它? 这是一个非常特殊的功能.这里仅适用于Clozure CL.该代码无法在其他任何地方使用.这在CCL IDE中适用于我.它检索以下符号的源代码:internal或:external在某个包中.对于从其他包继承的符号,它不会这样做(那么你经常会从包CL或CCL获得源代码,这有点太多了).

(defun retrieve-source-code (&optional (package *package*))
  (do-symbols (s package)
    (multiple-value-bind (symbol where)
                         (find-symbol (symbol-name s)
                                      package)
      (declare (ignore symbol))
      (when (member where '(:internal :external))
        (let ((ds (find-definition-sources s)))
          (when (and ds (listp ds))
            (loop for (nil sn) in ds
              for snt = (source-note-text sn)
              when snt do (progn
                            (terpri)
                            (princ snt)
                            (terpri)))))))))

如您所见,它可以检索自己(以及更多):

? (retrieve-source-code)

(defun retrieve-source-code (&optional (package *package*))
    (do-symbols (s package)
      (multiple-value-bind (symbol where)
                           (find-symbol (symbol-name s)
                                        package)
        (declare (ignore symbol))
        (when (member where '(:internal :external))
          (let ((ds (find-definition-sources s)))
            (when (and ds (listp ds))
              (loop for (nil sn) in ds
                for snt = (source-note-text sn)
                when snt do (progn
                              (terpri)
                              (princ snt)
                              (terpri)))))))))
NIL
网友评论