(Das folgende war ursprünglich eine Hausaufgabe, aber ich versuche es in einer neuen Sprache.)Wie kann ich die Lesezeile faul bewerten, um Eingaben zu sammeln?
In einem kurzen Clojure-Programm, ich versuche, eine Lazy-Sequenz von Eingaben (von der Befehlszeile) und von zu generieren Sie berechnen drei Zeichenwerte. Ich würde davon ausgehen, dass, möglicherweise je nachdem, wie Clojure wählte meine let
Bindungen zu bewerten, dies sollte eine schnelle Serie wie folgt erzeugen:
$ clj lazy-prompts.clj
Enter value #1: 32
Enter value #3: 162
Enter value #2: 12
Enter value #4: 118
a A 5
Stattdessen beginnt das Programm und hängt unendlich ohne Anweisungen. Ich versuchte eifrig, den for
Ausdruck durch Einwickeln in dorun
auszuwerten, aber das änderte das Ergebnis nicht.
Warum erzeugt das folgende Programm keine Eingabeaufforderungen?
(use '[clojure.java.io :only (reader)])
(def of-input
(for [value-number [1 2 3 4]]
(dorun
(print (str "Enter encrypted value #" value-number))
(read-line)
)))
(let [value-1 (nth of-input 1)
value-2 (nth of-input 2)
value-3 (nth of-input 3)
value-4 (nth of-input 4)]
(let [a (/ (+ value-1 value-3) 2)
b (/ (+ value-2 value-4) 2)
c (- value-4 b)]
(println (char a) (char b) (char c))))