2013-09-29 40 views
0

說我想讓用戶輸入一行一行的矩陣。 所以我首先要求矩陣的大小, 然後我想要求用戶輸入行像「第1行」「第2行」等。我怎樣才能獲得逐行clojure輸入?

最微不足道的事情似乎要有一個可變的載體,並使用像doseq這樣的somethinkg來改變它。

但我很好奇,如果有更多的clojure方式來做到這一點。 我最初的想法是使用formap。但它很懶,所以無法打印出提示。
所以像(map (fn [i] (do (printf "row %d \n" i) (read-line))) (range size))這樣的東西也會在結果列表中包含提示。

然後,我以爲我可以使用宏只是產生像

[((println "row i") (read-line)) 
((println "row i") (read-line)) 
((println "row i") (read-line)) ...] 

是否有反正我可以做到這一點沒有宏或可變的變量? 哪種方式更好?

回答

0

下做你要求什麼,只要我明白你的問題正確:

(loop [i (read-line) 
     ret []] 
    (println "row" i) 
    (if (some-condition) 
    ret 
    (recur (read-line) (conj ret i)))) 

例如,具有條件爲(= i "x")

user=> (loop [i (read-line) ret []] (println "row" i) (if (= i "x") ret (recur (read-line) (conj ret i)))) 
SOME 
row SOME 
some 
row some 
XXXX 
row XXXX 
my my my 
row my my my 
1 
row 1 
2 
row 2 
3 
row 3 
4 
row 4 
5 
row 5 
x 
row x 
["SOME" "some" "XXXX" "my my my" "1" "2" "3" "4" "5"] 
user=>