2012-01-03 9 views
17

Intento aprender un poco de Clojure porque el lenguaje se ve bien. Pero parece que no hay información en ningún lugar sobre cómo instalar/usar bibliotecas como, por ejemplo, clojure.math.numeric-tower.Usando clojure.math.numeric-tower, o cualquier biblioteca

Por ahora corro el REPL escribiendo esto en mi shell de Linux:

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

He descargado el frasco numérico-torre, y la puso en todas partes. He modificado la opción -cp de todas las maneras posibles. He puesto el archivo numeric_tower.clj en todas partes. Todavía no funciona.

¿Cuál es la forma de utilizar las bibliotecas?

+0

Hola, han pasado años, ¿aceptarán mi respuesta? – bitops

Respuesta

28

Tuve este mismo problema ayer (también como recién llegado a Clojure). Desde mi punto de vista, entre Clojure 1.2 y 1.3 dividieron muchas de las bibliotecas contrib en proyectos separados para que pudieran ser administradas más fácilmente. Y reducir el núcleo de lo que es Clojure.

La manera más fácil de lograr lo que estás tratando de hacer es a través de leiningen (ayer recibí esta respuesta de technomancy en el canal de IRC#clojure). La recomendación es crear un proyecto de "patio de recreo" con leiningen en el que puedas jugar y aprender Clojure.

Por lo tanto, crear un proyecto de parque infantil con:

lein new playground 

Modificar el archivo project.clj incluir:

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

como dependencia. Me dijeron que http://search.maven.org/ es la forma más fácil de averiguar cuál es la versión más actualizada de una biblioteca en particular.

A continuación, ejecute

lein deps 

para tirar en los frascos. Ahora está listo para

lein repl 

para ponerse en marcha.

Una vez que se inicia el repl, tire de la torre-numérico:

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

entonces usted puede hacer su llamada expt:

(math/expt 4 6) ;; yields 4096 

Espero que ayude!

+3

también puede hacer '(use '[clojure.math.numeric-tower])' y luego soltar la parte "matemática": '(expt 4 6)' => 4096 – tolitius

+1

Como antiguo programador de Java, este procedimiento para hacer Seguro que una biblioteca está disponible parece increíblemente simple, y estoy feliz de que la comunidad de clojure lo haya hecho así de simple. Como antiguo (bueno, actual) programador de Common Lisp, este procedimiento parece increíblemente complicado, y me sorprende que la comunidad de clojure no lo haya simplificado. (Ese no es un argumento para CL over clojure. Cada uno tiene sus costos y beneficios.) – Mars

0

Puede ponerlo directamente en su classpath, como lo hace con clojure.jar. Si ambos estaban en el directorio actual, debería empezar clojure con

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

(o ventanas)

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

Sin embargo, si ese proyecto está en clojars o en los repositorios de Maven, es más fácil de usar leiningen . Puede quitarle muchos problemas a ese tipo de cosas.

+0

Gracias por la respuesta rápida. Había hecho esto y el REPL no comenzaría (permiso denegado u otros "errores de análisis" extraños, etc ...). Bueno, ahora, descargué el jar nuevamente y el REPL se está ejecutando. Sin embargo, (clojure.math.numeric-tower/expt 4 6) me está dando una excepción de clase no encontrada. Supongo que debería haber usado un comando de importación, pero hay demasiados. No entiendo qué debería usar: "requerir", "usar", "importar", "alias", "referir" con teclas extrañas. Esas son demasiadas opciones para mí. –

0

E.g.

hacen carpeta lib

hacen bajo clojure lib/matemáticas

archivo de puesta lib/clojure/matemáticas/numeric_tower.clj

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

repl

(uso 'clojure.math.numeric-torre)

1

Gracias a todos. Ahora funciona. De hecho, el problema que realmente me confundió fue que Java no entendía el símbolo ~ (inicio de Linux) después de dos puntos en el classpath. que estaba haciendo

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

y Java no entiendo.

Sin embargo, si lo hace

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

funciona.

Comportamiento extraño de la variable classpath.

Habría usado lein, pero como estoy considerando hacer algo de programación para android, pensé que sería mejor si pudiera entender cómo funciona todo esto solo con Java. ¿A menos que Lein también pueda empaquetar el proyecto de Android?

De todos modos, gracias. Las tres respuestas fueron muy informativas.

+0

Acepto que merece ser aceptado. – Mars

Cuestiones relacionadas