如何在Clojure中使用Zip?

时间:2009-07-23 01:48:33

标签: clojure

我对clojure非常新。 zip实用程序看起来很有趣,但我似乎无法使用它。

我试过

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

但我得到了

java.lang.Exception: No such namespace: zip 

你如何使用外部库?

2 个答案:

答案 0 :(得分:16)

您可能会混淆两种导入代码的方法。你可以这样做:

user> (use 'clojure.zip)

或者在源文件中声明命名空间时:

(ns foo
  (:use clojure.zip))

第二个版本是一个扩展到第一个版本的宏。

(ns)之外,执行(:use "zip")会将:use视为一个函数,并以"zip"作为参数调用它(即尝试使用字符串{{ 1}}作为一个集合并查找其中的密钥"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])) 等函数。

请参阅requirerefer的文档以及讨论libs的网页。

答案 1 :(得分: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)