2009-07-23 7 views
9

Soy muy nuevo en clojure. La utilidad zip parece interesante, pero parece que no puedo usarla.¿Cómo uso Zip en Clojure?

me trataron

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

Pero me estoy

java.lang.Exception: No such namespace: zip 

¿Cómo uso del yo bibliotecas externas?

Respuesta

16

Puede estar confundiendo dos formas diferentes de importar código. Puede hacerlo de esta manera:

user> (use 'clojure.zip) 

O mientras se está declarando un espacio de nombres en un archivo de origen:

(ns foo 
    (:use clojure.zip)) 

La segunda versión es una macro que se expandió en el primer lugar.

Fuera de (ns), haciendo (:use "zip") va a tratar :use como una función y llamarla con "zip" como parámetro (es decir, tratar de utilizar la cadena "zip" como una colección y buscar la clave :use en ella), lo que no hace nada .

clojure.zip tiene algunas funciones cuyos nombres chocar con las cosas en clojure.core embargo, por lo que o bien tienen que hacer algo como esto:

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

o preferiblemente esto:

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

Con este último se puede consulte funciones como (zip/vector-zip data) como lo desee.

Consulte la documentación para require y refer y la página que habla de libs.

+1

Gracias por la respuesta completa ... he aprendido algunas cosas de eso. :) – jsight

2

no sé mucho acerca de clojure, pero esta pequeña canción parece funcionar:

(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, era demasiado tarde. :) – jsight