2013-11-18 5 views
0

Как я могу читать из файла рекурсивно, в Common Lisp. Я нахожу много примеров, которые являются итеративными, но мне нужен рекурсивный метод. В настоящее время я тренируюсь что-то вроде этого:Common Lisp, чтение из файла рекурсивно

(defun read-r() 
    (let ((in (open 'input.txt))) 
    (read-arrayR in) 
) 
) 

(defun read-arrayR(in) 
    ( 
     (lambda() 
     (setq num (char (read in nil) 
        (read in nil)) 
     ) 
    ) 
    ) 
    (if (null num) 
     (
     (lambda() 
      (colect num) 
      (read-arrayR in) 
     ) 
    ) 
    ) 
) 

(setq arr (read-r)) 

ответ

2

Во-первых, в CL это хороший стиль, не имеющие открытия или закрытия paranthesis только на линии.

Вот подход к read-char рекурсивно до EOF.

(defun read-recursive (stream-in stream-out) 
    (let ((char (read-char stream-in nil))) 
    (unless (null char) 
     (format stream-out "~c" char) 
     (read-recursive stream-in stream-out)))) 

Вы можете использовать его как это:

(with-open-file (file-stream "input.txt") 
    (with-output-to-string (string-stream) 
    (read-recursive file-stream string-stream) 
    string-stream)) 
Смежные вопросы