Я пытаюсь прочитать файл в список строк, чтобы каждая строка в файле была элементом в списке. Можно элегантно прочитать весь файл в строку, используя (use-modules (ice-9 textual-ports))
, выполнив что-то вроде:
(use-modules (ice-9 textual-ports))
(call-with-input-file "test.txt" get-string-all)
Существует определенная функция с именем get-line
, определенная так:
(define (get-line port)
(with-textual-input-conditions port (read-line port 'trim)))
Я хотел бы определить функцию, например:
(define (get-line-all port)
(with-textual-input-conditions port (read-line port 'split)))
Единственная проблема в том, что ports.scm не экспортирует определяющий синтаксис для:
(define-syntax with-textual-input-conditions
(syntax-rules ()
((_ port body0 body ...)
(with-i/o-port-error port make-i/o-read-error
(lambda () (with-i/o-decoding-error body0 body ...))))))
Я надеялся, что найдется библиотека или инструмент, который я мог бы использовать аналогичным образом, чтобы использовать el-patch в emacs, который позволит вам изменять функции перед выполнением. Нечто подобное можно сделать в elisp, например:
(el-patch-defun get-string (port)
(with-textual-input-conditions port (read-line port (el-patch-replace 'trim 'split)))
Возможно ли что-то подобное в Guile? Или мне нужно определить синтаксис with-textual-input-conditions
локально?