Как сделать автоматический ввод в несколько строк чтения? - PullRequest
0 голосов
/ 23 октября 2019

Как сделать автоматический ввод в несколько строк чтения?

(let ((out (with-output-to-string (*standard-output*) 
                (let ((*standard-input* (make-string-input-stream "y y")))
                  (when (find (read-line) '("yes" "y" "t") :test #'string-equal)
                    (print "aaaaa"))
                  (when (find (read-line) '("yes" "y" "t") :test #'string-equal)
                    (print "bbbbbb"))
                  ))))
     out)

Я пытаюсь вот так и получаю:

; Evaluation aborted on #<END-OF-FILE {10048FD503}>.

Этот код работает с read, ноМне нужно с read-line.

Ответы [ 3 ]

2 голосов
/ 24 октября 2019

Другой возможностью является использование параметра read-line, который требует возврата nil в конце файла:

(let ((out (with-output-to-string (*standard-output*) 
        (let ((*standard-input* (make-string-input-stream "y y")))
          (when (find (read-line *standard-input* nil) '("yes" "y" "t") :test #'string-equal)
             (print "aaaaa"))
          (when (find (read-line *standard-input* nil) '("yes" "y" "t") :test #'string-equal)
             (print "bbbbbb"))))))
  out)
1 голос
/ 24 октября 2019

Я заставил это работать так:

(with-output-to-string (*standard-output*)
  (with-input-from-string (*standard-input* (format nil "y~%y"))
    (when (find (read-line) '("yes" "y" "t") :test #'string-equal)
      (print "aaaaa"))
    (when (find (read-line) '("yes" "y" "t") :test #'string-equal)
      (print "bbbbbb"))))
0 голосов
/ 24 октября 2019

without-to-string не требуется для примера ...

CL-USER 177 > (flet ((yes-p (input-string &aux (yes-words '("yes" "y" "t")))
                       "returns T when the input-string is one of yes, y or t."
                       (find input-string yes-words :test #'string-equal)))
                (with-input-from-string (*standard-input* (format nil "y~%y"))
                  (when (yes-p (read-line))
                    (print "aaaaa"))
                  (when (yes-p (read-line))
                    (print "bbbbbb"))
                  (values)))

"aaaaa" 
"bbbbbb" 
...