我希望了解在emacs中进行common-lisp交互式开发的常见方法(我使用sly,但我认为slime的说明应该是相同的)。
假设我有这个文件:
将其剥离为
假设我有这个文件:
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload :closer-mop))
(in-package :cl-user)
(defpackage :shapes
(:use :closer-common-lisp-user)
(:export #:rectangle))
(in-package :shapes)
(defclass rectangle ()
((height :initform 0.0 :initarg :height)
(width :initform 0.0 :initarg :width)))
这非常简单。 逐个表达式评估它似乎是可行的,但加载整个文件(C-c C-l)会导致以下错误:
The variable SHAPES:RECTANGLE is unbound.
[Condition of type UNBOUND-VARIABLE]
将其剥离为
(in-package :cl-user)
(defpackage #:shapes
(:use #:cl-user)
(:export #:rectangle))
(in-package #:shapes)
(defclass rectangle ()
((height :initform 0.0 :initarg :height)
(width :initform 0.0 :initarg :width)))
没有做任何更改。
编译并加载(C-c C-k)也无法工作,使我只能使用:
; in: DEFCLASS RECTANGLE
; (SHAPES::DEFCLASS SHAPES:RECTANGLE NIL
; ((SHAPES::HEIGHT :INITFORM 0.0 :INITARG :HEIGHT)
; (SHAPES::WIDTH :INITFORM 0.0 :INITARG :WIDTH)))
;
; caught COMMON-LISP:STYLE-WARNING:
; undefined function: SHAPES::DEFCLASS
我看到defclass
无法从cl-user:defclass
中正确解析,但是找不到解决方法。
我想知道我漏掉了什么? 在Emacs中进行交互式开发的常用流程是什么?
closer-common-lisp-user
包不会导出内置的 Lisp 函数。您还需要使用:use #'common-lisp
。 - Barmar