Sie müssen die aktuelle *standard-output*
irgendwie an den neuen Thread übergeben, dann können Sie in dieser Thread-Funktion *standard-output*
an diesen Wert binden.
Aktuelle Common Lisp-Implementierungen machen threadlokale dynamische Bindungen und SBCL is one of them.
(sb-thread:make-thread ;; thread function
#'(lambda (standard-output)
;; thread-local dynamic binding of special variable
(let ((*standard-output* standard-output))
...))
;; thread function argument, provided by the current thread
:arguments (list *standard-output*))
Bitte beachte, dass ich die Thread-Funktion Argument *standard-output*
genannt hätte und dann würde ich nicht die let
brauchen, da die Dynamik bei Funktionseingabe erfolgt Bindung wurde. Aber ich denke, dass dynamische Bindungen explizit und offensichtlich sein sollten, ungeachtet der Ohrenschützer um besondere variable Namenskonventionen.