clojure

Code Generation in Clojure

(Disclaimer: I am a C# guy. I've just started learning Clojure.) I understand that a Clojure program has the ability to manipulate itself or easily generate other programs. It has something to do with everything in Clojure being a data structure and that generating programs would be the same as creating any other type of data structure....

Problem Extending A Class in Clojure: ClassFormatError: Duplicate field name&signature

I'm trying to extend JButton with Clojure, but I ran into a problem when I try to create my own constructors. Whenever I use :constructors with :gen-class I keep getting a "ClassFormatError: Duplicate field name&signature" message when I try to instantiate my class. I think I'm following the Clojure docs properly. Am I doing something ...

Transform this Clojure call into a lazy sequence

I'm working with a messaging toolkit (it happens to be Spread but I don't know that the details matter). Receiving messages from this toolkit requires some boilerplate: Create a connection to the daemon. Join a group. Receive one or more messages. Leave the group. Disconnect from the daemon. Following some idioms that I've seen used ...

What is the best way to initialize all the elements of a JTable with Clojure?

Sorry if this is a bit of a noob question but I am still getting used to functional programming. I want to write a simple Sudoku solver as an exercise. One of my plans is to create a JTable with 9 rows and 9 columns and initialize them all with the string "123456789" as a starting position. If I have a TableModel I can define a functi...

Clojure: extend Wicket panel and call to panel methods

Currently I'm trying to create sample Wicket page with Clojure (in existing wicket project). Code looks like this: (ns a.set.of.packages.dataview.info.EmptyNodeInfo2Panel (:import [a.set.of.packages.tree TreeModelBean] [a.set.of.packages.dataview.supplemental GenericHeaderPanel])) (gen-class :name a.set.of.packages.dat...

Clojure: How do I apply a function to a subset of the entries in a hash-map?

I am not to Clojure and attempting to figure out how to do this. I want to create a new hash-map that for a subset of the keys in the hash-map applies a function to the elements. What is the best way to do this? (let [my-map {:hello "World" :try "This" :foo "bar"}] (println (doToMap my-map [:hello :foo] (fn [k] (.toUpperCase k))...

Should I use a function or a macro to validate arguments in Clojure?

I have a group of numeric functions in Clojure that I want to validate the arguments for. There are numerous types of arguments expected by the functions, such as positive integers, percentages, sequences of numbers, sequences of non-zero numbers, and so on. I can validate the arguments to any individual function by: Writing validation...

How to covert a lazy sequence to a non-lazy in Clojure

I tried the following in Clojure, expecting to have the class of a non-lazy sequence returned: (.getClass (doall (take 3 (repeatedly rand)))) However, this still returns clojure.lang.LazySeq. My guess is that doall does evaluate the entire sequence, but returns the original sequence as it's still useful for memoization. So what is t...

What is the difference between Clojure's "send" and "send-off" functions with respect to dispatching an action to an agent?

The Clojure API describes these two functions as: (send a f & args) - Dispatch an action to an agent. Returns the agent immediately. Subsequently, in a thread from a thread pool, the state of the agent will be set to the value of: (apply action-fn state-of-agent args) and (send-off a f & args) - Dispatch a potentially blocking...

Clojure: How do I get a list of combinations of 'coordinates'?

Say i have a function that takes to coordinates, x and y. For x I have a sequence of values say [1 2 3] and for y I have another sequence of values say [4 5 6]. How would I get a list with all the combinations of these? So the desired result would be something like: (myfn [1 2 3] [4 5 6]) => [[1 4] [1 5] [1 6] [2 4] [2 5] [2 6] [3 4]...

Clojure: Call a function for each element in a vector with it index

Say I have a vector: (def data ["Hello" "World" "Test" "This"]) And I want to populate a table somewhere that has an api: (defn setCell [row col value] (some code here)) Then what is the best way to get the following calls to happen: (setCell 0 0 "Hello") (setCell 0 1 "World") (setCell 0 2 "Test") (setCell 0 3 "This") I foun...

how to unit test for laziness

I have a function that is supposed to take a lazy seq and return an unrealized lazy seq. Now I want to write a unit test (in test-is btw) to make sure that the result is an unrealized lazy sequence. ...

How can I abort an evaluation in Clojure Box (Emacs)?

I've been caught up in long running computations lately thanks to Project Euler and I'd like to know how to abort an evaluation and return to the REPL prompt. I'm running the standard Clojure Box version of Emacs. I tried the obvious REPL > Interrupt Lisp Process and Slime > Interrupt Command but neither kill the execution and return my ...

Shortest total path among set of Latitude/Longitudes

I have a set of 52 or so latitude/longitude pairs. I simply need to find the shortest path through all of them; it doesn't matter where staring point or ending point is. I've implemented Dijkstra's algorithm by hand multiple times before and don't really have the time to do it again. I've found a couple things that come close, but most...

Is Clojure production ready?

Where is it already being used in production and how ? ...

Clojure: Simple factorial causes stack overflow

What am i doing wrong? Simple recursion of few thousand deep throws "StackOverflowError" If the limit of Clojure recursions is so low, how can I rely on it ? (defn fact[x] (if (<= x 1) 1 (* x (fact (- x 1)) ))) user=> (fact 2) 2 user=> (fact 4) 24 user=> (fact 4000) java.lang.StackOverflowError (NO_SOURCE_FILE:0) ...

Clojure: working with a java.util.HashMap in an idomatic Clojure fashion

I have a java.util.HashMap object m (a return value from a call to Java code) and I'd like to get a new map with an additional key-value pair. If m were a Clojure map, I could use: (assoc m "key" "value") But trying that on a HashMap gives: java.lang.ClassCastException: java.util.HashMap cannot be cast to clojure.lang.Associative No...

Compojure development without web server restarts

I've written a small Swing App before in Clojure and now I'd like to create an Ajax-style Web-App. Compojure looks like the best choice right now, so that's what I'm going to try out. I'd like to have a real tiny edit/try feedback-loop, so I'd prefer not to restart the web server after each small change I do. What's the best way to a...

Questions to answer before proposing to use a new language?

What are the technical questions I simply must have answers for before I approach someone about introducing a new language? I'm looking for the list of technical questions that without a really good answer, I should not even waste anyone's time by proposing that we use language X. PS: (def X clojure) ...

Clojure: Doesn't the ability to use Java objects with state defy the whole idea of functional P?

I thought the whole idea was to have only computation with NO state and NO side effects. Now if a Clojure app(or even worse, a reusable Clojure library ) can use and create any Java object, how can I be sure I don't get side effects or state ? ...