Ошибка определения схемы (короткая)
Это часть переводчика, который я делаю. Я продолжаю получать эту ошибку:
define not allowed in an expression context in: (define ret1 (list->string wl))
Я использую DrScheme версии 371, языковой стандарт (R5RS).
(define (read-command)
(set! com '( '() ))
(set! wl (read-as-list))
(define ret1 (list->string wl))
(commRead)
ret1
)
похожая проблема здесь:
(define repl(
lambda()
(display "\nUofL>")
(define inp (read-command))
(define lengtha (length com)
1 ответ
Решение
В вашем интерпретаторе, кажется, что определения могут появляться только в начале функции. Вы должны использовать let*
вместо:
(define (read-command)
(let* ((com '('())) ; are you sure you didn't mean '(()) ?
(wl (read-as-list))
(ret1 (list->string wl)))
(commRead ret1)))
Для второй проблемы попробуйте это:
(define repl
(lambda ()
(display "\nUofL>")
(let ((inp (read-command))
(lengtha (length com)))
; return a value here
)))
Как примечание, ваш код, кажется, написан в процедурном стиле - со всеми этими set!
и вызовы функций выполняются для эффекта. Как на земле ret1
будет изменено, если вы не передадите его в качестве параметра commRead
? Я бы посоветовал вам прочитать хорошую книгу по программированию на Scheme и начать писать код в более функциональном стиле, в настоящее время ваш код не идиоматичен, и у вас рано или поздно возникнут проблемы.