2012-01-03 41 views
17

Tôi cố gắng tìm hiểu một chút về Clojure vì ngôn ngữ trông đẹp mắt. Nhưng có vẻ như không có thông tin nào về cách cài đặt/sử dụng các thư viện như ví dụ tháp clojure.math.numeric.Sử dụng clojure.math.numeric-tower hoặc bất kỳ thư viện nào

Để bây giờ tôi chạy REPL bằng cách gõ này trong vỏ Linux của tôi:

java -cp ~/Clojure/clojure-1.3.0/clojure-1.3.0.jar clojure.main 

Tôi đã tải về jar số-tháp, và đặt nó ở khắp mọi nơi. Tôi đã sửa đổi tùy chọn -cp theo mọi cách có thể. Tôi đã đặt tệp numeric_tower.clj ở mọi nơi. Nó vẫn không hoạt động.

Cách sử dụng thư viện là gì?

+0

Xin chào, đã nhiều năm - bạn có chấp nhận câu trả lời của tôi không? – bitops

Trả lời

28

Tôi đã có cùng một vấn đề này ngày hôm qua (cũng như một người mới đến Clojure). Từ sự hiểu biết của tôi, giữa Clojure 1.2 và 1.3, họ tách ra nhiều thư viện contrib thành các dự án riêng biệt để chúng có thể được quản lý dễ dàng hơn. Và thu nhỏ cốt lõi của Clojure là gì.

Cách dễ nhất để hoàn thành những gì bạn đang cố gắng làm là thông qua leiningen (Tôi nhận được câu trả lời này từ kỹ thuật trong kênh IRC#clojure tối hôm qua). Đề nghị là tạo ra một dự án "sân chơi" bằng cách sử dụng leiningen mà bạn có thể chơi xung quanh và tìm hiểu Clojure.

Vì vậy, tạo một dự án sân chơi với:

lein new playground 

Sửa đổi các tập tin project.clj bao gồm:

[org.clojure/math.numeric-tower "0.0.1"] 

như một sự phụ thuộc. Tôi được thông báo rằng http://search.maven.org/ là cách dễ nhất để tìm ra phiên bản mới nhất của một thư viện cụ thể.

Sau đó, chạy

lein deps 

để kéo trong lọ. Bây giờ bạn đã sẵn sàng để

lein repl 

để bắt đầu.

Khi repl được bắt đầu, kéo trong số-tháp:

(require '[clojure.math.numeric-tower :as math]) 

Sau đó, bạn có thể thực hiện cuộc gọi expt của bạn:

(math/expt 4 6) ;; yields 4096 

Hy vọng rằng sẽ giúp!

+3

bạn cũng có thể làm '(sử dụng '[clojure.math.numeric-tower])' và sau đó thả phần "toán học": '(expt 4 6)' => 4096 – tolitius

+1

Là một lập trình viên Java cũ, thủ tục này để thực hiện chắc chắn rằng một thư viện có sẵn dường như vô cùng đơn giản, và tôi vui vì cộng đồng clojure đã làm cho nó trở nên đơn giản. Như một cựu lập trình viên Lisp (tốt, hiện tại), thủ tục này có vẻ vô cùng phức tạp, và tôi ngạc nhiên rằng cộng đồng clojure đã không làm cho nó đơn giản hơn. (Đó không phải là một lý lẽ cho CL qua clojure. Mỗi cái đều có chi phí và lợi ích của nó.) – Mars

0

Bạn có thể đặt nó trực tiếp trong đường dẫn lớp, như bạn đang làm với clojure.jar. Nếu cả hai đang ở trong thư mục hiện hành, bạn sẽ bắt đầu clojure với

java -cp clojure-1.3.0.jar:numeric-tower.jar clojure.main 

(hoặc cửa sổ)

java -cp clojure-1.3.0.jar;numeric-tower.jar clojure.main 

Tuy nhiên, nếu dự án đó là trên clojars hoặc trong kho maven, nó dễ dàng hơn để sử dụng leiningen . Nó có thể mất rất nhiều rắc rối ra khỏi loại điều đó.

+0

Cảm ơn bạn đã trả lời nhanh. Tôi đã làm điều này và REPL sẽ không bắt đầu (cho phép bị từ chối, hoặc "lỗi phân tích cú pháp" lạ khác, v.v ...). Vâng, bây giờ, tôi đã tải lại jar và REPL đang chạy. Tuy nhiên, (clojure.math.numeric-tower/expt 4 6) là cho tôi một lớp học không tìm thấy ngoại lệ. Tôi đoán tôi nên đã sử dụng một lệnh nhập khẩu, nhưng có quá nhiều người trong số họ. Tôi không hiểu những gì tôi nên sử dụng: "yêu cầu", "sử dụng", "nhập", "bí danh", "tham chiếu" với các phím lạ. Đó là quá nhiều sự lựa chọn cho tôi. –

0

Ví dụ:

làm cho thư mục lib

làm dưới lib clojure/math

tập tin đặt lib/clojure/math/numeric_tower.clj

java -cp;. Lib; clojure-1.3.0.jar ; lib/clojure clojure.main

repl

(sử dụng 'clojure.math.numeric-tháp)

1

Xin cảm ơn tất cả. Nó hoạt dộng bây giờ. Trong thực tế, vấn đề thực sự nhầm lẫn với tôi là java không hiểu biểu tượng ~ (linux home) sau dấu hai chấm trong classpath. Tôi đã làm

java -cp ~/Clojure/clojure-1.3.0/clojure-1.3.0.jar:~/Clojure/lib clojure.main 

và java không hiểu điều đó.

Tuy nhiên, nếu bạn làm

java -cp ~/Clojure/clojure-1.3.0/clojure-1.3.0.jar:/home/username/Clojure/lib clojure.main 

nó hoạt động.

Hành vi lạ của biến classpath.

Tôi đã sử dụng lein, nhưng vì tôi đang cân nhắc thực hiện một số chương trình cho android, tôi nghĩ sẽ tốt hơn nếu tôi có thể hiểu tất cả công việc này chỉ với java. Trừ khi lein có thể gói dự án android là tốt?

Dù sao, cảm ơn. Cả ba câu trả lời đều rất thông tin.

+0

Tôi đồng ý rằng nó xứng đáng được chấp nhận. – Mars

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