Подтвердить что ты не робот

Использование 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 всюду. Это все еще не работает.

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

4b9b3361

Ответ 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)