wynik działania (map println ...)
jest zbiorem wyniku działania println, który jest zerowy. Rezultatem jest kolekcja (nil nil nil nil)
, którą drukuje REPL. podczas drukowania tego wywołania println również wydrukują tam dane wyjściowe do REPL, aby zobaczyć dwie mieszane razem.
jeśli zdefiniujesz to bez drukowania:
user=> (def result (map println [1 2 3 4]))
#'user/result
początkowo nic się nie dzieje, ponieważ wynik jest leniwy. Jeśli zdajemy sobie sprawę, bez drukowania za pomocą dorun
user=> (dorun result)
1
2
3
4
nil
widzimy skutki uboczne każdego println a następnie wartość zwracaną dorun
która jest zerowa. Możemy spojrzeć na zawartość wyniku oceniając go
user=> result
(nil nil nil nil)
i zobaczyć, że zwraca pęczek nil
s
Zalecenia ogólne: Nie używaj funkcji efektem ubocznym dla operacji mapie – Ankur