逐行读取并等待键盘输入以读取下一行

Dmi*_*tin 0 common-lisp

一个新手问题:( Common Lisp)一次读取一行文件,然后通过击键移动到下一行.

有一个标准:

(let ((in (open "/some/file/name.txt" :if-does-not-exist nil)))
  (when in
    (loop for line = (read-line in nil)
        while line do (format t "~a~%" line))
    (close in)))
Run Code Online (Sandbox Code Playgroud)

在古老的Fortran中,我习惯于在wait某个地方运作(when in wait 'action...).

Clojure中有解决方案java.io.

但是JUST Common Lisp怎么样?

sds*_*sds 6

首先,应该总是使用 with-open-file而不是 open/ close.

接下来,ANSI CL标准没有指定i/o缓冲,因此 没有标准方法使CL对每次击键做出反应.但是,您可以要求您的用户点击Enter(或Return):

(with-open-file (in path)
  (loop for line = (read-line in nil nil)
    while line do
      (read-line)               ; wait for user to hit RET
      (format t "--> ~A~%" line)))
Run Code Online (Sandbox Code Playgroud)