我不知道如何避免因Clojure而被替换

时间:2019-09-03 11:41:38

标签: clojure

我想用python表示这样的东西。

a = int(input())
for i in range(a):
    b = input()
    print(b)

这是我实际上写的。

(let [a][(read-line)]
     (for[i (range [a])]
            (defn b[string]
                (= (read-line) b)
                 (println [b]))))

但是现在有很多错误。

3 个答案:

答案 0 :(得分:1)

类似于Python流程。

(doseq [_ (range (Integer. (read-line)))
    :let [b (read-line)]]
    (println b))

甚至更接近Python代码:

(let [a (Integer. (read-line))]
  (doseq [i (range a)
      :let [b (read-line)]]
          (println b)))

更多功能代码

(mapv println (repeatedly (Integer. (read-line)) read-line))

但更惯用(根据肖恩·科菲尔德的观点)

(run! println (repeatedly (Integer. (read-line)) read-line))

答案 1 :(得分:0)

在我的头顶上,您可以执行以下操作:

(map (fn [_] (println (read-line))) (range (Integer/parseInt (read-line))))

这里可能有比地图更合适的内容,请阅读clojure文档。 clojure标准库有很多很棒的东西:)

编辑:@SeanCorfield在评论中提出了一个观点,在这里使用run!是更好的选择,因为我们不在乎map的返回值。

答案 2 :(得分:0)

或者这个...

(repeatedly
 (read-string (read-line))
 (comp println read-line))