I dont suppose this is possible on *nix machines? If i recall correctly, the Mathematica Kernel is not available for *nix-based architectures.
On Fri, Nov 20, 2009 at 7:19 PM, Rich Hickey <richhic...@gmail.com> wrote: > > > On Nov 20, 5:57 pm, Garth Sheldon-Coulson <g...@mit.edu> wrote: > > Dear Clojurians, > > > > I am very happy to announce Clojuratica version 2. > > > > Clojuratica now offers the **syntactic** integration of Clojure and > > Mathematica. > > > > What does this mean? It means you can write Clojure code that looks like > > this: > > > > => (FactorInteger 12345) > > [[3 1] [5 1] [823 1]] > > > > You guessed it. FactorInteger is a Mathematica function. And that's a > > Clojure REPL. > > > > Symbolic math in Clojure? Syntax-unquoting to feed in Clojure data > > structures? Absolutely. > > > > => (Sqrt (* 9 a)) > > (* 3 (Power a 1/2)) > > > > => (let [x [[2 1] [1 2]]] > > (CholeskyDecomposition ~x)) > > [[(Power 2 1/2) (Power 2 -1/2)] [0 (Power 3/2 1/2)]] > > > > Note that the Clojure "matrix" (vector of vectors) is converted on the > fly > > to a Mathematica matrix, and vice versa. Automatic conversions take place > > for all Clojure and Mathematica data structures. > > > > There's more. Mathematica functions are now Clojure functions. The > following > > is a Mathematica function written in Clojure that finds the n shortest > genes > > in the human genome. (Mathematica has some cool functions like GenomeData > to > > try out.) > > > > => (Function [n] > > (Take > > (Sort > > (Map > > (Function [gene] [(GenomeData gene "SequenceLength") gene]) > > (GenomeData))) > > n)) > > #<parse$parse_fn__1230$fn__ > > 1234 clojuratica.base.parse$parse_fn__1230$fn__1...@19fa0b5> > > > > What's that ugly return value? It's a first-class Clojure function. We > > evaluated a Mathematica function in Clojure and got back a Clojure > function > > which, when we call it, hands off the computation to Mathematica and > returns > > the result: > > > > => (*1 4) > > [[11 "IGHD727"] [16 "IGHD411"] [16 "IGHD417"] [16 "IGHD44"]] > > > > All the power of Mathematica is now seamlessly available in Clojure. If > you > > like, you can think of Mathematica as a particularly mature Clojure > library > > for linear algebra, matrix decomposition, symbolic mathematics, > > optimization, differential equations, symbolic and numerical integration, > > Fourier analysis, 2D and 3D visualization, image and photo manipulation, > > exploratory data analysis, probability and statistics, graph theory, > number > > theory, geodesy, and access to the Wolfram Research internet data feeds > on > > finance, chemistry, geometry, meteorology, astronomy, protein structure, > > and, as we've seen, the human genome. > > > > Let's take a step back and see how it all works. > > > > Observe: Clojure and Mathematica are remarkably similar languages despite > > their different areas of strength. > > > > Constant-lookup arrays: > > > > Clj vectors: [1 2 3] > > Mma lists: {1, 2, 3} > > > > Matrices as nested arrays: > > > > Clj: [[1 0] [0 1]] > > Mma: {{1, 0}, {0, 1}} > > > > Function calls *always* use prefix notation: > > > > Clj: (func arg1 arg2 arg3) > > Mma: Func[arg1, arg2, arg3] > > > > In Mathematica, common functions do have syntactic sugar, but it always > is > > just syntactic sugar: > > > > Clj: none > > Mma: 1 + 1 is just Plus[1, 1] > > !foo && (bar > baz) is just And[Not[foo], Greater[bar, baz]] > > > > Homoiconicity: > > > > Clj: (nth '(func arg1 arg2) 1) ==> arg1 > > Mma: Part[Func[arg1, arg2], 1] ==> arg1 > > > > The similarities suggest the core idea: Mathematica expressions can be > > written as Clojure expressions without any loss of information, and vice > > versa. There is perfect correspondence. Happily, Mathematica functions > are > > PascalCase by convention. This allows the interning of Mathematica > functions > > right into your Clojure namespace without conflict. > > > > Mma: FactorInteger[1091] > > Clj: (FactorInteger 1091) > > > > Mma: Function[{x}, x + 1] > > Clj: (Function [x] (Plus x 1)) > > > > The heart of Clojuratica is simple. Convert Clojure expressions to > > Mathematica expressions, evaluate them in Mathematica, and parse the > result > > back into Clojure expressions. > > > > As you will see in the tutorial on the Clojuratica web page < > http://clojuratica.weebly.com>, you are not forced to intern Mathematica > > functions directly into your namespace. You may, but you do not have to. > The > > generic way to call Mathematica code is using the math macro (which you > > yourself define, so it need not be called "math"): > > > > => (let [x "World"] > > (math (StringJoin "Hello, " ~x "! This is some Mathematica code's > > output."))) > > "Hello, World! This is some Mathematica code's output." > > > > => (def hello > > (math > > (Function [x] > > (StringJoin "Hello, " x "! This is a Mathematica function's > > output.")))) > > #'user/hello > > > > => (hello "World") > > "Hello, World! This is a Mathematica function's output." > > > > There are other features, too: > > > > * A concurrency framework for multithreaded, parallel computation. > > Mathematica is not designed for threads or concurrency. It has excellent > > support for parallel computation, but parallel evaultions are initiated > from > > a single-threaded master kernel which blocks until all parallel > evaluations > > return. By contrast, Clojuratica includes a concurrency framework that > lets > > multiple Clojure threads execute Mathematica expressions without blocking > > others. The computations will be farmed out to as many Mathematica > kernels > > as are parallelized on the local machine or across a cluster or grid. The > > computations will return asynchronously, and some threads will go about > > their business while others continue to wait. I have worked to make the > > system as high-performance as possible. > > > > * Hashmap conversion. Mathematica has no map data structure, so I > > include a basic one with Clojuratica, along with a few other helpful > > Mathematica funcions and features (e.g. Let, with is akin to With but > allows > > later bindings to see earlier bindings, just like Clojure's let). > > > > Version 2 of Clojuratica is a complete rewrite of version 1. It should be > > considered alpha software for the time being. I would appreciate > suggestions > > and bug reports. > > > > I plan to make the integration work in the opposite direction when I have > > time. It might be a while! The Clojure-in-Mathematica integration that > was > > available in version 1 has been removed for now. > > > > I encourage you to read the tutorial on the web page < > http://clojuratica.weebly.com>. You can download the software there as > well. > > > > I hope you enjoy it! > > Very cool! > > Rich > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- ~phunny.pha...@gmail.com ~mar...@archlinux.us -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en