Comment detail
出力の一時停止と再開 (Nested Flatten)threadを扱うときに変数の入り方がわかりにくかったですね。 q<return>すると resの中には'common-lisp-user::q と入力さ れていました。こんなことあるんですね。
1 2 3 4 5 6 7 8 9 10 11 | 0a1,4
> (defpackage :dokaku179
> (:use :common-lisp :sb-thread))
> (in-package :dokaku179)
>
8c12,14
< (lambda()(setf ,res (read *standard-input*)))))
---
> (lambda()(progn
> (in-package :dokaku179)
> (setf ,res (read *standard-input*))))))
|





ytakenaka
#6364()
[
Common Lisp
]
Rating0/0=0.00
(defun print-a () (format *standard-output* "a") (finish-output) (sleep 1)) (defmacro read-thread(res) `(sb-thread:make-thread (lambda()(setf ,res (read *standard-input*))))) (defun main () (let* ((res nil) (stop nil) (thread (read-thread res))) (loop do (if (null (sb-thread:thread-alive-p thread)) (case res ((q) (return)) ((p) (and stop (print-a)) (setf stop (not stop) thread (read-thread res))) (otherwise (unless stop (print-a)) (setf thread (read-thread res)))) (unless stop (print-a))))))Rating0/0=0.00-0+
1 reply [ reply ]