2009-07-23 4 views
9

Je suis très très nouveau à clojure. L'utilitaire zip semble intéressant mais je ne peux pas l'utiliser.Comment utiliser Zip dans Clojure?

J'ai essayé

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

mais je reçois

java.lang.Exception: No such namespace: zip 

Comment utiliser des bibliothèques externes yo?

Répondre

16

Vous pouvez être déroutant de deux manières différentes d'importer du code. Vous pouvez le faire de cette façon:

user> (use 'clojure.zip) 

Ou alors vous déclarer un espace de noms dans un fichier source:

(ns foo 
    (:use clojure.zip)) 

La deuxième version est une macro qui est développée dans la première.

En dehors de (ns), faire (:use "zip") va traiter :use en fonction et l'appeler avec "zip" comme paramètre (par exemple essayer d'utiliser la chaîne "zip" comme une collection et rechercher la :use clé en elle), qui ne fait rien .

clojure.zip a quelques fonctions dont les noms en conflit avec les choses à clojure.core, donc vous devez soit faire quelque chose comme ceci:

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

Ou de préférence ceci:

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

Avec ce dernier, vous pouvez se référer à des fonctions comme (zip/vector-zip data) comme vous le souhaitez. Voir la documentation pour require et refer et la page qui parle de libs.

+1

Merci pour la réponse complète ... J'ai appris quelques choses de cela. :) – jsight

2

Je ne sais pas beaucoup sur Clojure, mais cette petite chansonnette semble fonctionner:

(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

Oups, j'étais trop tard. :) – jsight