2011-09-20 3 views
2

불쌍한 영어에 대해 사과드립니다. 나는 lisp에 문제가 있습니다. 내가변수 B는 Lisp에서 언 바운드입니다.

* (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. 

어떤 사람이 나에게 도움을 줄 여기 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-10.html SBCL 에 코드를 입력?

+4

SICP는 하나의 Lisp 방언을 사용합니다. SBCL은 또 다른 Lisp 방언 인 Common Lisp을 구현합니다. Scheme 구현을 사용해야한다고 생각합니다. –

답변

2

당신은 DEFUN와 함수를 정의 : 귀하의 경우에는

(defun a() 3) 

당신은 함수가 정의되지 않은 물론이고 인수 A를 ... 함께 DEFINE 전화하려고 노력하고 있습니다. SBCL은 모든 CL의 구현처럼 동안 방식은 1 LISP (함수와 변수에 대한 동일한 공간) 인

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

참고

더 일반적으로, 함수 like this에 매개 변수를 제공 할 2-lisp (함수와 변수의 다른 네임 스페이스).

따라서, (define foo 3)은 상수를 정의하고 (define foo (lambda() 3))은 상수 함수를 정의합니다. 커먼 리스프에서 one way은 상수를 정의합니다.

(defconstant foo 3) 
+0

메모리에서 일하는 것이 맞습니다. '()'는 함수가 매개 변수를 취하지 않음을 나타냅니다. –

+0

해결되었습니다! 나는 ** sbcl **을 사용하지만, Scheme 코드를 작성합니다 : P, Thanks, –

+0

예, Scheme을 Common Lisp으로 번역하려는 것은 _intended_입니다! 적어도 내가 도울 수있어서 기뻐. –