Non capisco perché questo codice si comporta in modo diverso in diverse implementazioni:Lisp formato e forza uscita
(format t "asdf")
(setq var (read))
In CLISP si comporta come ci si aspetterebbe, con la richiesta stampata seguita dalla lettura, ma in SBCL legge, quindi uscite. Ho letto un po 'su internet e cambiato:
(format t "asdf")
(force-output t)
(setq var (read))
Questo, ancora una volta, funziona bene in CLISP, ma in esso SBCL ancora recita, poi uscite. Ho anche provato a separarlo in un'altra funzione:
(defun output (string)
(format t string)
(force-output t))
(output "asdf")
(setq var (read))
E legge ancora, quindi emette. Non sto usando correttamente force-output
o è solo un idiosincrasia di SBCL?
grazie, ha funzionato! –
Un'altra opzione, come per [Practical Common Lisp] (http://www.gigamonkeys.com/book/practical-a-simple-database.html), consiste nell'utilizzare il globale '* query-io *' invece di t o nulla. – lindes