Ошибка с определением в Racket

Я только что открыл Racket несколько дней назад, и я пытаюсь освоиться с ним, написав небольшой скрипт, который генерирует изображения для представления исходного кода, используя#lang slideshow.

Я знаю, что при программировании в функциональной парадигме хорошей практикой является создание почти всех ваших переменных сlet, но я считаю, что он вводит слишком много уровней вложенности и что Racket let имеет слишком сложный API, который требует лишних скобок. Я уверен, что это для устранения двусмысленности при использованииlet более мощными способами, но для моих целей это просто раздражение. Следовательно, я создаю все свои переменные сdefineи писать блоки сbegin если мне нужно (например, в телеif заявление).

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

Вот оскорбительный код:

(define sub-code (foldr ht-append (rectangle 0 0) (map internal-style (rest code))))

хотя что мы определяемsub-code кажется довольно неактуальным. Если я заменю его

(define sub-code '())

Я получаю ту же ошибку. DrRacket говорит, чтоdefine используется в контексте выражения. Я понимаю, что обычно означает эта ошибка - то есть, что она будет возникать при написании кода(print (define x 10)), но я не вижу, что могло бы вызвать это здесь.

Если это поможет, этоdefine находится в началеbegin блок, внутриif заявление

(if (list? code)
    (begin
        (define sub-code '())
        ; a few more define statements and finally an expression ))

Конкретное сообщение об ошибке, которое DrRacket печатает

define: not allowed in an expression context in: (define sub-code (quote ()))

Я думал, может бытьdefine не допускается вbegin блоки, но я проверилдокументы и один из примеров дляbegin является

(begin
    (define x 10)
    x)

Так что я не знаю, что делать. Заранее спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос