如何在clojure中逐行输入?

时间:2013-09-29 19:19:23

标签: clojure

说我希望用户输入一行一行的矩阵。 所以我先问一下矩阵的大小, 那么我想问一下用户输入行的提示,如“第1行”,“第2行”等。

最琐碎的事情似乎是拥有一个可变的载体,并使用像doseq这样的东西来改变它。

但我很好奇是否有更多的方法可以做到这一点。 我最初的想法是使用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)) ...]

无论如何我可以在没有宏或变量的情况下做到这一点吗? 哪种方式更好?

2 个答案:

答案 0 :(得分:0)

请查看this question,了解有关从控制台读取多行的惯用方法的信息。

答案 1 :(得分: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=> 
相关问题