* (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.
有人给我一个帮助吗?
答案 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)