У меня есть функция, которая принимает список, а затем запрашивает у пользователя имя файла. этот список должен быть записан в путь по умолчанию, сохраненный как имя файла
Что-то вроде (псевдокод):
(define storeme
(lambda (lst)
(write-list lst filename default-path)))
Не знаю, как заставить это работать. "write" принимает только 2 аргумента для объекта записи & [output-port]. Благодарность
2 ответа
Вы должны привязать выходной порт к переменной
Что-то типа
(define storeme
(lambda (lst)
(let* ((filename (prompt-for-filename)) ;;the prompt routine should retrun #f
(output ;for invalid filenames or user cancellations
(open-file-output-port ;;routine may vary be implementation and scheme revision
(string-append *default-path* filename))))
(begin (if filename
(begin (write lst output) (display-each "List Stored in " filename))
(display "List not stored"))
(close-output-port output)))))
Вам нужен полный путь откуда-то, предположим, что он у вас есть. Определите свою функцию как:
(define store-me-at
(lambda (lst path)
(with-output-to-file path (lambda () (write lst)))))
При использовании with-output-to-file
current-output-port
устанавливается за вас, поэтому write
не требует аргумента port
.
Выполнение этого с помощью with-output-to-file
гарантирует, что port
, открытый для path
, всегда будет закрыт, даже если есть нелокальный выход (или другие тонкости, связанные с call/cc
и связанным с ним использованием ). Если вы просто используете open-output-file
, а затем close-ouput-port
, вы не получите такой гарантии.
Похожие вопросы
Новые вопросы
scheme
Scheme - это функциональный язык программирования в семействе Lisp, тесно смоделированный на основе лямбда-исчисления с активным (аппликативным порядком) вычислением. ПО ВОПРОСАМ о схемах URL ПОЖАЛУЙСТА, используйте тег "URL-схема".
open-file-output-port
(или друзей)