Co robią symbole Clojure, gdy są używane jako funkcje?
Próbując rozwiązać problem 4Clojure ”Uniwersalny silnik obliczeniowy„obejmujący ponowną ocenę, przypadkowo skończyłem nazywając coś takiego:
(apply '/ '(16 8))
raczej niż zamierzone:
(apply / '(16 8))
Miało to dezorientujący efekt uboczny powrotu8
, co sprawiło, że pomyślałem, że pomieszałem matematykę.
Później zdałem sobie sprawę z błędu po debugowaniu - nie udało mi się ocenić/
symbol przed próbą wywołania go - i tak to zrozumiałclojure.lang.Symbol
musi wdrożyćclojure.lang.IFn
. Ale co to za implementacja?robić? Wszystko, co mogę zrobić, to wrócićnil
z jednym argumentem lub drugim argumentem, jeśli został podany.