Dlaczego ta mapa powoduje, że mój REPL zamarza?
Wta bardzo przydatna odpowiedźzasugerowano, że mogę zastąpić ten kod:
(defun describe-paths (location edges)
(apply (function append) (mapcar #'describe-path
(cdr (assoc location edges)))))
Z tym:
(defun describe-paths-mapcan (location edges)
(mapcan #'describe-path
(cdr (assoc location edges))))
Z pewnością rozumiem koncepcyjnie, dlaczego to powinno działać, ale tak nie jest; druga odmiana zawiesza mój REPL, a znak CL nigdy nie powraca. Muszę ponownie uruchomić SLIME. Więc jasprawdził toi zastanawiam się, czy fakt, że mapcan nie jest używanylist
, ale raczejnconc
, dlaczego? Dlatego nie są to właściwie funkcjonujące bloki kodu?
Dla ciekawskich mijam to:
(describe-paths-mapcan 'living-room *edges*)
Gdzie*edges*
jest:
(defparameter *edges* '((living-room (garden west door)
(attic upstairs ladder))
(garden (living-room east door))
(attic (living-room downstairs ladder))))
I:
(defun describe-path (edge)
`(there is a ,(caddr edge) going ,(cadr edge) from here.))