Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LISP iterative to recursive

I wrote down this iterative code in LISP using the loop function:

(defun loadfile (filename)
  (with-open-file (stream filename)
    (loop for line = (read-line stream nil 'eof)
          until (eq line 'eof)
          collect line)))
    )
  )

Is there a way to rewrite it without loop, in a recursive way?

like image 547
Fred_2 Avatar asked Aug 07 '26 11:08

Fred_2


1 Answers

Surprise them with a GOTO instead:

(defun loadfile (filename)
  (with-open-file (stream filename)
    (prog (line lines)
      repeat
      (setf line (read-line stream nil))
      (when line
        (push line lines)
        (go repeat))
      (return (reverse lines)))))
like image 72
Rainer Joswig Avatar answered Aug 09 '26 01:08

Rainer Joswig