Qual è la semantica esatta della riduzione in clojure?

0

I documenti Clojure relativi allo stato (reduce f val coll) :

If val is supplied, returns the result of applying f to val and the first item in coll, then applying f to that result and the 2nd item, etc.

Così ho provato:

(reduce str ["s1" "s2"] "s3")

Che porta a:

"[\"s1\" \"s2\"]s3"

Tuttavia, quando provo

(apply str ["s1" "s2"])

Ottengo:

"s1s2"

Quindi, perché il vettore viene convertito nella sua rappresentazione stringa?

    
posta Arne 17.09.2013 - 13:07
fonte

2 risposte

1

Per una vista "immagine" per gli altri che potrebbero vedere questa domanda. La reduce di Clojure è una piega a sinistra. Per i programmatori Haskell foldl .

Crea la seguente struttura

(reduce - 0 (range 1 3))
(- (- (- 0 1) 2) 3)

o infisso

(((0 - 1) - 2) - 3)

L'intuizione è che è una piega a sinistra perché i paren si spostano verso sinistra

    
risposta data 17.09.2013 - 18:56
fonte
1

Ok, ho letto male i documenti. Quindi riduci effettivamente questo:

(str ["s1" "s2"] "s3")

Che valuta:

"[\"s1\" \"s2\"]s3"

Perché str deve convertire i suoi argomenti in string!

    
risposta data 17.09.2013 - 13:11
fonte

Leggi altre domande sui tag