little schemer drracket 错误无法在其定义之前引用标识符
little schemer drracket error cannot reference an identifier before its definition
初学者问题,
刚开始阅读小策划书并在我的 macbook 上安装了 DrRacket 来尝试一些代码示例。
如果我选择Racket语言,下面的代码
#lang Racket
(define (atom? x)
(and (not (pair? x)) (not (null? x))))
(atom? '())
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)) )
(else #f))))
(lat? (a b))
将触发错误消息:
a: unbound identifier in module in: a
如果我选择R5RS语言,
#lang R5RS
(define (atom? x)
(and (not (pair? x)) (not (null? x))))
(atom? '())
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)) )
(else #f))))
(lat? (a b))
我收到一条错误消息:
#%plain-module-begin: illegal use (not a module body) in: (#%plain-module-begin (module configure-runtime racket/base (require r5rs/init)) (define (atom? x) (and (not (pair? x)) (not (null? x)))) (atom? (quote ())) (define lat? (lambda (l) (cond ((null? l) #t) ((atom? (car l)) (lat? (cdr l))) (else #f)))) (lat? (a b)))
有人知道我做错了什么吗?
谢谢
看起来最后一次通话应该是
(lat? '(a b))
...没有?
(另外:我建议一般使用#lang 球拍,但我强烈怀疑你的问题 R5RS 出现是因为你是 "setting the language twice";如果你使用 #lang R5RS 启动你的程序,你不会不需要更改语言级别。相反,如果您设置语言级别,则不应使用 #lang R5RS 启动程序。如果您同时执行这两种操作,我猜您会收到您看到的错误消息。)
初学者问题, 刚开始阅读小策划书并在我的 macbook 上安装了 DrRacket 来尝试一些代码示例。
如果我选择Racket语言,下面的代码
#lang Racket
(define (atom? x)
(and (not (pair? x)) (not (null? x))))
(atom? '())
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)) )
(else #f))))
(lat? (a b))
将触发错误消息:
a: unbound identifier in module in: a
如果我选择R5RS语言,
#lang R5RS
(define (atom? x)
(and (not (pair? x)) (not (null? x))))
(atom? '())
(define lat?
(lambda (l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)) )
(else #f))))
(lat? (a b))
我收到一条错误消息:
#%plain-module-begin: illegal use (not a module body) in: (#%plain-module-begin (module configure-runtime racket/base (require r5rs/init)) (define (atom? x) (and (not (pair? x)) (not (null? x)))) (atom? (quote ())) (define lat? (lambda (l) (cond ((null? l) #t) ((atom? (car l)) (lat? (cdr l))) (else #f)))) (lat? (a b)))
有人知道我做错了什么吗?
谢谢
看起来最后一次通话应该是
(lat? '(a b))
...没有?
(另外:我建议一般使用#lang 球拍,但我强烈怀疑你的问题 R5RS 出现是因为你是 "setting the language twice";如果你使用 #lang R5RS 启动你的程序,你不会不需要更改语言级别。相反,如果您设置语言级别,则不应使用 #lang R5RS 启动程序。如果您同时执行这两种操作,我猜您会收到您看到的错误消息。)