views:

709

answers:

2

Hello everyone

I'm currently learning clojure, but I was wondering how to get and store user input in a clojure program. I was looking at the clojure api and I found a function called read-line, however I'm not sure how to use it if it's the right function to use...

Anyhow, how do you get user input in clojure ?

+10  A: 

read-line is the correct function..

(println (read-line))

..would basically echo the users input:

Clojure 1.0.0-
user=> (println (read-line))
this is my input
this is my input

To use it in an if statement, you'd probably use let:

(let [yayinput (read-line)]
    (if (= yayinput "1234")
      (println "Correct")
      (println "Wrong")))

Hope that's enough to get you started, because that's about the limit of my Clojure knowledge!

dbr
+5  A: 

Remember also that you have access to all of Java ...

OK so perhaps I should present some examples ... my clojure skills are not good so these examples may need a bit of tweaking.

The System.console() way:

(let [console (. System console)
     pwd (.readPassword console "tell me your password: ")]
   (println "your password is " pwd))

The BufferedReader way:

(print "give me a line: ")
(let [reader (java.io.BufferedReader. *in*)
     ln (.readLine reader)]
   (println "your line is " ln))

My point is that one can leverage knowledge of Java, and Java itself, in Clojure. It's one of its principal, advertised strengths.

Wonder what would my score have been if the question were about user input from a GUI!

By the way, you could use JOptionPane to put up a little GUI to get user input ...

Allen
This question has nothing to do with having access to Java.
Rayne
So being able to call System.console()'s getPassword()/readLine() is what? Seriously, the question is about getting user input in Clojure ... a JVM language.
Allen
Oops. That should be readPassword() above.
Allen
If you're going to write Clojure like this, you might as well keep using Java.
rik.the.vik
Uh, this is where Clojure *has* to meet Java. If you are going to program Clojure like this, you might as well use nothing.
Allen