У меня есть такой файл:
declare
a = aexpress
b = bexpress
begin
Моя программа-схема устанавливает текущий порт ввода в этот файл, затем вызывает
(declarations (read))
Что я возвращаюсь, это #f
.
или, скорее, консоль говорит: «Объект #f не применим».
Я перестал использовать скобки и не могу найти причину, по которой он должен возвращать логическое значение, но я уверен, что что-то упустил.
То, что я хочу, это ((a aexpress) (b bexpress))
(define declarations
(lambda (token)
(cond (((eq? token 'begin) '())
(else (let* ((name token)
(eqsign (read))
(value (read)))
(cons (list name value) (declarations (read)))))))))
Вызывается:
(define convert
(lambda (filename)
(begin
(set-current-input-port! (open-input-file filename))
(statement (read))
)
)
)
(define statement (lambda (token) (
cond (
( (eq? token 'declare) (declarations (read)) )
; ( (eq? token 'declare) (declare_statement) )
; ( (eq? token 'begin) (begin_statement) )
; ( (eq? token 'for) (for_statement) )
; ( (eq? token 'if) (if_statement) )
; ( (eq? token 'set) (set_statement) )
; (else (expression_token))
))))