Схема предоставляет несколько способов чтения из файлов. Вы можете использовать стиль «открыть / закрыть» следующим образом:
(let ((port (open-input-file "file.txt")))
(display (read port))
(close-input-port port))
Вы также можете использовать ответ igneus, который передает порт процедуре и автоматически закрывает порт после завершения процедуры:
(call-with-input-file "file.txt"
(lambda (port)
(display (read port))))
Наконец, мой любимый, изменяет текущий входной порт для чтения из файла, запускает предоставленную процедуру, закрывает файл и сбрасывает текущий входной порт в конце:
(with-input-from-file "file.txt"
(lambda ()
(display (read))))
Вы также можете прочитать раздел Процедуры ввода . Функция «read», используемая выше, только читает следующий объект Scheme из порта. Есть также read-char, read-line и т. Д. Если вы прочитали все из файла, вы получите что-то, что eof-объект? вернет true - полезно, если вы просматриваете файл, чтобы прочитать все содержимое.
например. чтение всех строк в файле в список
(with-input-from-file "text.txt"
(lambda ()
(let loop ((lines '())
(next-line (read-line)))
(if (eof-object? next-line) ; when we hit the end of file
(reverse lines) ; return the lines
(loop (cons next-line lines) ; else loop, keeping this line
(read-line)))))) ; and move to next one