Я использую 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))
))
Вывод:
расширьтесь: несвязанный идентификатор в модуле в: ПОЗВОЛИТЬ
Примечание: Я пытался использовать, ПОЗВОЛЯЮТ*, потому что я считал это: stackoverflow.com/ questions/946050/using-let-in-scheme, но это производит ту же ошибку.
Спасибо!
Похоже, проблема с чувствительностью к регистру для этой языковой настройки. Я знаю, что в Scheme не учитывается регистр, но когда я попробовал
(define (equalimp lis1 lis2)
(cond
((null lis1) (null? lis2))
((null? lis2) '())
((eq? (car lis1) (car lis2)) (equalimp (cdr lis1) (cdr lis2)))
(else '())
))
, все заработало отлично.