变量B在Lisp中未绑定

时间:2011-09-20 19:47:13

标签: lisp scope

抱歉我的英语不好:) 我有一个lisp的问题。我在这里输入代码http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html sbcl

* (define a 3)

; in: DEFINE A
;     (DEFINE A 3)
; 
; caught WARNING:
;   undefined variable: A
; 
; caught STYLE-WARNING:
;   undefined function: DEFINE
; 
; compilation unit finished
;   Undefined function:
;     DEFINE
;   Undefined variable:
;     A
;   caught 1 WARNING condition
;   caught 1 STYLE-WARNING condition

debugger invoked on a UNBOUND-VARIABLE in thread #<THREAD
                                               "initial thread" RUNNING
                                                {10029211E1}>:
The variable A is unbound.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
 0: [ABORT] Exit debugger, returning to top level.
有人给我一个帮助吗?

1 个答案:

答案 0 :(得分:2)

使用DEFUN定义一个函数:

(defun a () 3)

在你的情况下,你试图用一个参数A来调用DEFINE函数......这当然是未定义的。

更一般地说,您将参数提供给函数like this

(defun param-taking-fun (a b)
  (+ a b))

请注意,Scheme是一个1-lisp(函数和变量的命名空间相同),而SBCL与所有Common Lisp实现一样,是一个2-lisp(函数和变量的不同命名空间)。

因此,在Scheme (define foo 3)中定义了一个常量,而(define foo (lambda () 3))定义了一个常量函数。在Common Lisp one way中定义常量是

(defconstant foo 3)