2009-07-23 20 views
9

我對clojure非常陌生。該zip實用程序看起來很有趣,但我似乎無法使用它。如何在Clojure中使用Zip?

我試圖

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

但我正在逐漸

java.lang.Exception: No such namespace: zip 

如何喲使用外部庫?

回答

16

您可能會混淆兩種不同的方式導入代碼。你可以這樣來做:

user> (use 'clojure.zip) 

或者當你聲明在源文件中的命名空間:

(ns foo 
    (:use clojure.zip)) 

第二個版本是擴展到了第一的宏。

(ns)

,做(:use "zip")打算把:use的功能,並與"zip"作爲參數調用它(即嘗試使用字符串"zip"作爲一個集合,並在其中查找關鍵:use),它什麼都不做。

clojure.zip有他們的名字在clojure.core東西交鋒,雖然一些功能,讓你無論是不得不做這樣的事情:

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

或最好的:

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

對於後者,你可以如您所願,請參考(zip/vector-zip data)等功能。

請參閱requirerefer的文檔以及有關libs的頁面。

+1

感謝全面的答案......我才知道從幾件事情。 :) – jsight 2009-07-23 02:20:38

2

我不知道很多關於Clojure的,但這個小玩意似乎工作:

(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

哎呀,我太遲了。 :) – jsight 2009-07-23 02:19:07