Использование clojure.math.numeric-tower или любой библиотеки - PullRequest
19 голосов
/ 03 января 2012

Я пытаюсь немного выучить Clojure, потому что язык выглядит красиво. Но, похоже, нигде нет информации о том, как установить / использовать библиотеки, например, о clojure.math.numeric-tower.

А пока я запускаю REPL, набрав это в моей оболочке Linux:

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

Я скачал банку с числовой башней и повсюду. Я изменил опцию -cp всеми возможными способами. Я поместил файл numeric_tower.clj везде. Это все еще не работает.

Как использовать библиотеки?

Ответы [ 4 ]

30 голосов
/ 03 января 2012

У меня была такая же проблема вчера (также как новичок в Clojure).Насколько я понимаю, между Clojure 1.2 и 1.3 они разделили многие библиотеки contrib на отдельные проекты, чтобы ими было легче управлять.И уменьшите суть того, что такое Clojure.

Самый простой способ выполнить то, что вы пытаетесь сделать, - это через leiningen (я получил этот ответ от техномантизма на IRC-канале #clojure вчера вечером).Рекомендуется создать проект «детская площадка» с использованием leiningen, в котором вы можете поиграть и изучить Clojure.

Итак, создайте проект детской площадки с:

lein new playground

Модифицируйте project.cljфайл для включения:

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

в качестве зависимости.Мне сказали, что http://search.maven.org/ - это самый простой способ узнать, какая самая последняя версия конкретной библиотеки.

Затем запустите

lein deps

вытащить в банки.Теперь вы готовы к

lein repl

, чтобы приступить к работе.

Как только репл начнется, наберите в числовой башне:

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

Тогда вы можете сделатьВаш опытный звонок:

(math/expt 4 6) ;; yields 4096

Надеюсь, это поможет!

1 голос
/ 03 января 2012

Спасибо всем. Это работает сейчас. На самом деле проблема, которая действительно смутила меня, заключалась в том, что java не понимал символ ~ (linux home) после двоеточия в пути к классам. Я делал

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

а ява этого не понимает.

Однако, если вы делаете

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

это работает.

Странное поведение переменной classpath.

Я бы использовал lein, но так как я собираюсь заняться программированием для Android, я подумал, что будет лучше, если я пойму, как все это работает только с Java. Разве lein может также упаковать проект Android?

В любом случае, спасибо. Все три ответа были очень информативными.

0 голосов
/ 03 января 2012

Например,

сделать папку lib

сделать под lib clojure / math

положить файл lib / clojure / math / numeric_tower.clj

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

repl

(используйте 'clojure.math.numeric-tower)

0 голосов
/ 03 января 2012

Вы можете поместить это прямо в ваш путь к классу, как вы делаете с clojure.jar. Если бы оба были в текущем каталоге, вы бы начали clojure с

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

(или окна)

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

Однако, если этот проект находится на clojars или в репозиториях maven, его проще использовать leiningen . От такого рода вещей может быть много хлопот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...