Clojurians
#clojure-italy
<
2018-04-24
>

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

manuel07:04:27

'giorno giovani

reborg09:04:18

Challenge del giorno: creare funzione "rotations" che prende una collection e ritorna la lista (infinita o no) di rotazioni complete ed "in avanti" di "coll". Ad es.:

(def coll [0 1 2 3])
(defn rotations [xs])
(rotations coll)
;; ((0 1 2 3) (1 2 3 0) (2 3 0 1) (3 0 1 2))
"In avanti" vuol dire che ((0 1 2 3) (3 0 1 2) (2 3 0 1) (1 2 3 0)) come risultato non va bene perche' il primo elemento di ogni lista decresce invece che salire. Idee?

reborg09:04:36

Bonus se senza vectors con solo lazy sequences

gabriele.carrettoni10:04:09

@reborg prima cosa che mi è venuta in mente

(defn rotations [xs]
  (iterate (fn [[x & xs]]
             (concat xs (list x))) xs))

reborg10:04:20

@gabriele.carrettoni mi sembra buono!

reborg10:04:50

Una birra il prossimo giro a Londra? :slightly_smiling_face:

reborg10:04:59

Questa la mia (defn rotations [xs] (partition (count xs) 1 (mapcat identity (repeat xs))))

gabriele.carrettoni10:04:52

(defn rotations [xs]
  (iterate (fn [[x & xs]]
             `([email protected] ~x)) xs))
non so neanche cosa implichi questa versione a livello computazionale rispetto alla mia precedente, se qualcuno me lo sapesse spiegare ricambio la birra per quando passa a milano :smile:

gabriele.carrettoni10:04:54

@reborg la tua versione me la devo riguardare che mi confonde :grin:

reborg10:04:29

dire poco e niente a livello di computazione, solo qualche gratttacapo in piu' per chi guarda :slightly_smiling_face:

bronsa12:04:45

>non so neanche cosa implichi questa versione a livello computazionale rispetto alla mia precedente, hai solo aumentato il costo, ma la complessita` rimane quella

bronsa12:04:21

e` letteralmente come se avessi scritto (seq (concat xs (list x)))

bronsa12:04:29

quindi hai solo il costo di seq in piu`, che e` negligibile

bronsa12:04:03

@gabriele.carrettoni un trucco per “vedere” cosa fa syntax-quote e` quello di infilarci un quote davanti:

bronsa12:04:23

'`([email protected] ~x) ;=> (clojure.core/seq (clojure.core/concat xs (clojure.core/list x)))

gabriele.carrettoni12:04:52

a :top: questa non la sapevo, grazie

reborg12:04:07

neanch'io bella l'e'