2009-07-23 40 views
9

Tôi rất rất mới với clojure. Các tiện ích zip trông thú vị nhưng tôi không thể sử dụng nó.Tôi làm cách nào để sử dụng Zip trong Clojure?

tôi đã cố gắng

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

Nhưng tôi nhận được

java.lang.Exception: No such namespace: zip 

Làm thế nào để yo sử dụng thư viện bên ngoài?

Trả lời

16

Bạn có thể nhầm lẫn hai cách khác nhau để nhập mã. Bạn có thể làm theo cách này:

user> (use 'clojure.zip) 

Hoặc khi bạn đang tuyên bố một không gian tên trong một tập tin nguồn:

(ns foo 
    (:use clojure.zip)) 

Phiên bản thứ hai là một vĩ mô được mở rộng sang người đầu tiên.

Bên ngoài (ns), làm (:use "zip") đang xảy ra để điều trị :use như một hàm và gọi nó với "zip" như tham số của nó (tức là cố gắng sử dụng các chuỗi "zip" như một bộ sưu tập và tìm kiếm chìa khóa :use trong nó), mà không làm gì .

clojure.zip có một số chức năng có tên xung đột với mọi thứ trong clojure.core mặc dù, vì vậy bạn có phải làm một cái gì đó như thế này:

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

Hoặc tốt nhất là điều này:

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

Với sau này bạn có thể tham khảo các chức năng như (zip/vector-zip data) như bạn muốn.

Xem tài liệu cho requirerefer và trang nói về libs.

+1

Cảm ơn cho câu trả lời toàn diện ... Tôi đã học được một vài điều từ đó. :) – jsight

2

Tôi không biết nhiều về clojure, nhưng Ditty này ít dường như làm việc:

(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

Rất tiếc, tôi đã quá muộn. :) – jsight

Các vấn đề liên quan