маленькая ошибка Drracket Schemer не может ссылаться на идентификатор до его определения

вопрос новичка, только что начал небольшую книгу по схемам и установил DrRacket на свой macbook, чтобы попробовать некоторые примеры кода.

Если я выберу язык 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))) 

Кто-нибудь знает, что я сделал не так?

Спасибо


person user3277841    schedule 07.06.2018    source источник
comment
У меня была аналогичная проблема с рэкетом Little Schemer, и я нашел комментарий на stackoverflow.com/a/6380648/390557 полезно - в основном, используйте enter!   -  person wreckgar23    schedule 15.02.2020


Ответы (1)


Похоже, этот последний звонок должен быть

(lat? '(a b))

... no?

(Также: я бы рекомендовал использовать #lang racket в целом, но я сильно подозреваю, что ваша проблема R5RS возникает из-за того, что вы «устанавливаете язык дважды»; если вы запускаете свою программу с #lang R5RS, вам не нужно менять уровень языка. И наоборот, если вы установите уровень языка, вы не должны запускать свою программу с #lang R5RS. Если вы сделаете и то, и другое, я предполагаю, что вы получите сообщение об ошибке, которое вы видели.)

person John Clements    schedule 07.06.2018