Czy istnieje sposób w Clojure, aby napisać makro (lub użyć istniejącego), które zwraca dwa lub więcej wyrażeń s?Clojure makro zwraca dwa lub więcej s-wyrażeń
Przykład. Powiedzieć, że staram się produkować 10 pierwszych kwadraty:
(map * (range 10) (range 10))
Teraz chcę spróbować skorzystać powtórki tak, że mogę później dostarczyć mocy (2 na razie) jako parametr:
(map * (repeat 2 (range 10)))
Powyższe nie działa jednak jako powtórz zwraca pojedyncze wyrażenie s z dwoma zakresami, a nie dwoma zakresami.
Proszę nie dostarczać alternatywnych implementacji funkcji "zwracaj pierwsze 10 pól". Interesują mnie idiomatyczne sposoby radzenia sobie z takimi sytuacjami lub ogólnie stosowane obejścia.
Przypuszczam szukam sposobu realizacji eksplodować poniżej:
(explode '(a b c)) ;; evals to a b c
(map * (explode (repeat 2 (range 10)))
Twoje pytanie jest nieco mylące, ponieważ sformułowane.Byłoby pomocne, gdybyś mógł podać przykład składni, którą chciałbyś zobaczyć; na razie używasz 'map' i' repeat', które mają już określone definicje w Clojure. – JohnJ
@JohnJ zobacz zaktualizowany ogon mojego posta –