В настоящее время я выполняю упражнение 1.3 из книги sicp. Вот описание проблемы:Ошибка: не удается связать имя в нулевой синтаксической среде
Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers.
Я попытался решить эту проблему с помощью следующего кода
(define (square x) (* x x))
(define (sq2largest a b c)
((define large1 (if (> a b) a b))
(define small (if (= large1 a) b a))
(define large2 (if (> c small) c small))
(+ (square large1) (square large2))))
Когда я побежал в мит-схеме, я получаю следующее сообщение об ошибке:
;Can't bind name in null syntactic environment: large1 #[reserved-name-item 13]
Ошибка при запуске этой ошибки не дает много результатов. Кто-нибудь знает, что не так с моим кодом? (Я не знаком с Схемой)
Удаление внутренних скобок действительно сработало, но я не понимаю, как это решает проблему. Синтаксис define (define). Я думал, что мне придется группировать все под вместе, следовательно, добавочную пару круглых скобок. –
@KietTran Основная форма 'define' действительно' '(define)'. Но вы используете вариант для определения функций, '(define () )'. У вас были дополнительные парсеры для ''. Кстати, эта вторая вариация для определения функций - это просто сахар для первичной формы: это сокращенное выражение для '(define (lambda ()). Другими словами,« определение функции »означает определение переменной, значение которой равно «лямбда» вместо (скажем) числа или строки. –