Переменная B не привязана в Лиспе - PullRequest
2 голосов
/ 20 сентября 2011

извините за мой плохой английский :) У меня проблема с лиспом. я набираю код здесь 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 Ответ

2 голосов
/ 20 сентября 2011

Вы определяете функцию с помощью DEFUN:

(defun a () 3)

В вашем случае вы пытаетесь вызвать функцию DEFINE с аргументом A ... который, конечно, не определен.

В более общем смысле вы предоставляете параметры для функции следующим образом :

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

Обратите внимание, что Scheme - это 1-lisp (то же пространство имен для функций и переменных), а SBCL, как и все CommonРеализация Lisp представляет собой 2-lisp (различные пространства имен для функций и переменных).

Таким образом, на схеме (define foo 3) определяет константу, а (define foo (lambda () 3)) определяет константу.В Common Lisp один способ для определения константы -

(defconstant foo 3)
...