2009-07-23 3 views
9

Sono molto nuovo nel clojure. L'utility zip sembra interessante ma non riesco a usarla.Come si usa Zip in Clojure?

ho cercato

;; ZIP 
(:use "zip") 
(def data '[[a * b] + [c * d]]) 
(def dz (zip/vector-zip data)) 

Ma sto

java.lang.Exception: No such namespace: zip 

Come yo usare librerie esterne?

risposta

16

Si potrebbero confondere due modi diversi per importare il codice. Si può fare in questo modo:

user> (use 'clojure.zip) 

o mentre si sta dichiarando un namespace in un file di origine:

(ns foo 
    (:use clojure.zip)) 

La seconda versione è una macro che si espande nella prima.

Al di fuori di (ns), facendo (:use "zip") sta per trattare :use in funzione e chiamarlo con il "zip" come parametro (vale a dire cercare di utilizzare la stringa "zip" come una collezione e cercare la chiave :use in esso), che non fa nulla .

clojure.zip ha alcune funzioni il cui nome si scontrano con le cose in clojure.core però, così hai a fare qualcosa di simile:

user> (use '(clojure [zip :rename {next next-zip replace replace-zip remove remove-zip}])) 

o, preferibilmente, in questo modo:

user> (require '(clojure [zip :as zip])) 

Con quest'ultimo è possibile fare riferimento a funzioni come (zip/vector-zip data) come desiderato.

Vedere la documentazione per require e refer e la pagina che parla di libs.

+1

Grazie per la risposta esauriente ... ho imparato alcune cose da questo. :) – jsight

2

non so molto di clojure, ma questa canzoncina sembra funzionare:

(require '[clojure.zip :as zip]) 
(def t '(:a (:b :d) (:c :e :f))) 
(def z (zip/zipper rest rest cons t)) 
(zip/node z) 
+0

Ooops, ero in ritardo. :) – jsight