我可以在Common Lisp中取消调用函数

时间:2014-01-26 12:39:56

标签: function emacs common-lisp

我正在学习defclassdefmethod以及defgeneric,因此我使用成员defclass制作了一个名为savings-account的{​​{1}}。< / p>

我创建了一个balance(如下所示)以开始改变余额的值,但它还没有完成。

defun

然后我决定改为(defun balance (account) (slot-value account 'balance)) (下面)。

defgeneric

但是当我运行(defgeneric balance (account)) 时,我收到了这个错误:

  

BALANCE已经命名普通函数或宏。

有没有办法轻松取消调用或取消平衡,所以我不必重启我的Emacs会话?

2 个答案:

答案 0 :(得分:6)

您可以使用fmakunbound删除函数定义(使用defun或defgeneric创建)。

答案 1 :(得分:2)

任何自尊的Lisp都会为您提供错误 restart 以更改定义。

SLIME和Clozure CL:

The function BALANCE is defined as something other than a generic function.
   [Condition of type CCL::SIMPLE-PROGRAM-ERROR]

Restarts:
 0: [CONTINUE] Try to remove any global non-generic function or macro definition.
 1: [RETRY] Retry SLIME REPL evaluation request.
 2: [*ABORT] Return to SLIME's top level.
 3: [ABORT-BREAK] Reset this thread
 4: [ABORT] Kill this thread

只需在该缓冲区中键入0或选择相应的行并按 return 即可选择CONTINUE重启。

除了Xach的回答,使用 SLIME ,您只需将文本光标移动到函数名称上,然后键入 cc cu ,即调用SLIME-UNDEFINE-FUNCTION