ошибки «несвязанного идентификатора» в схеме - PullRequest
6 голосов
/ 29 апреля 2010

Я использую drscheme из: http://www.archlinux.org/packages/extra/x86_64/drscheme/

Я пытаюсь работать с примером кода в моем учебнике, но получаю ошибки «несвязанный идентификатор». Это потому, что интерпретатор схемы не настроен правильно? или код просто неверный?

Вот несколько примеров:

Введите:

#lang scheme
(define (equalimp lis1 lis2)
        (COND
         ((NULL? lis1) (NULL? lis2))
         ((NULL? lis2) '())
         ((EQ? (CAR lis1) (CAR lis2)) (equalimp (CDR lis1) (CDR lis2)))
         (ELSE '())
))

Выход:

Добро пожаловать в DrScheme, версия 4.2.5 [3m]. Язык: схема; ограничение памяти: 128 МБ.

развернуть: несвязанный идентификатор в модуле в: COND

Введите:

#lang scheme
(define (quadratic_roots a b c)
  (LET (
        (root_part_over_2a
         (/ (SQRT (- (* b b) (* 4 a c))) (* 2 a)))
        (minus_b_over_2a (/ (- 0 b) (* 2 a)))
       )
  (DISPLAY (+ minus_b_over_2a root_part_over_2a))
  (NEWLINE)
  (DISPLAY (- minus_b_over_2a root_part_over_2a))
  ))

Выход:

развернуть: несвязанный идентификатор в модуле в: LET

Примечание: я попытался использовать LET *, потому что я прочитал это: stackoverflow.com/ questions / 946050 / using-let-in-схема, но он выдает ту же ошибку.

Спасибо!

1 Ответ

6 голосов
/ 29 апреля 2010

Это похоже на проблему чувствительности к регистру для этой языковой настройки. Я знаю, что Схема должна быть без учета регистра, но когда я попробовал

(define (equalimp lis1 lis2)
        (cond
         ((null lis1) (null? lis2))
         ((null? lis2) '())
         ((eq? (car lis1) (car lis2)) (equalimp (cdr lis1) (cdr lis2)))
         (else '())
))

это работало просто отлично.

...