Ошибка с определением в 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)
Так что я не знаю, что делать. Заранее спасибо!