У меня есть следующий код:
(define (get-data)
(define port (open-input-file "../data/problem11.txt"))
(define field 0)
(define (get-fields)
(define field (read port))
(cond ((not (eof-object? field))
(cons field (get-fields)))
(else '())))
(define returned (get-fields))
(close-input-port port)
returned)
(get-data)
Я не могу найти никаких проблем с моим кодом в соответствии с инструкциями, и в Google ничего не появляется при поиске, но когда я запускаю код, SCM (мой выбранный интерпретатор схемы) выдает мне следующую ошибку:
;ERROR: "/usr/lib/scm/Iedline.scm": unbound variable: get-fields
; in expression: (get-fields)
; in scope:
; (returned get-fields field port . #@define)
; () procedure get-data
;STACK TRACE
1; (#@define ((returned (get-fields)) (get-fields (#@lambda () (# ...
2; (#@get-data)
Но когда я заставляю свой код выглядеть так, он отлично работает:
(define (get-data port)
(define field 0)
(define (get-fields)
(define field (read port))
(cond ((not (eof-object? field))
(cons field (get-fields)))
(else '())))
(get-fields))
(define port (open-input-file "../data/problem11.txt"))
(define alfa (get-data port))
(close-input-port port)
Почему, когда я пытаюсь определить возвращенный как возвращенный список get-полей, я получаю ошибку несвязанной переменной, но когда я определяю alfa как возвращенный список get-данных (во втором блоке кода), это работает хорошо? Это то, что get-fields является рекурсивным? Я не понимаю Любые ответы здесь будут великолепны, спасибо.