Использование clojure.math.numeric-tower или любой библиотеки
Я пытаюсь выучить немного 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 всюду.
Это все еще не работает.
Как использовать библиотеки?
Ответы
Ответ 1
У меня была эта же проблема вчера (также как новичок в Clojure). По моему мнению, между Clojure 1.2 и 1.3 они разделили многие библиотеки вкладчиков на отдельные проекты, чтобы их можно было легко управлять. И уменьшите ядро того, что Clojure.
Самый простой способ выполнить то, что вы пытаетесь сделать, - это leiningen (вчера я получил этот ответ от technomancy в канале IRС# 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])
Затем вы можете выполнить свой expt-вызов:
(math/expt 4 6) ;; yields 4096
Надеюсь, что это поможет!
Ответ 2
Спасибо всем. Он работает сейчас.
На самом деле проблема, которая меня действительно смутила, заключалась в том, что java не понимал символ ~ (linux home) после двоеточия в пути к классам.
Я делал
java -cp ~/Clojure/clojure-1.3.0/clojure-1.3.0.jar:~/Clojure/lib clojure.main
и java этого не понимает.
Однако, если вы делаете
java -cp ~/Clojure/clojure-1.3.0/clojure-1.3.0.jar:/home/username/Clojure/lib clojure.main
он работает.
Странное поведение переменной classpath.
Я бы использовал лейн, но, поскольку я рассматриваю возможность программирования для андроида, я подумал, что было бы лучше, если бы я мог понять, как все это работает только с java. Если лейн не может также аннексировать проект?
В любом случае, спасибо. Все три ответа были очень информативными.
Ответ 3
Вы можете поместить его прямо в свой путь к классам, например, с помощью 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
Однако, если этот проект находится в клоарах или в репозиториях maven, его проще использовать leiningen. Это может занять много хлопот из такого рода вещей.
Ответ 4
например.
создать папку lib
сделать под lib clojure/math
положить файл lib/ clojure/math/numeric_tower.clj
java -cp.; lib; clojure -1.3.0.jar; lib/clojure clojure.main
РЕПЛ
(используйте 'clojure.math.numeric-tower)