Wil*_*hes 8 stdin clojure clojure-java-interop
我在Clojure 写了一个Brainf***翻译.我想在使用stdin时传递一个程序.但是,我仍然需要稍后从stdin读取用户输入.
目前,我这样做:
$ cat sample_programs/hello_world.bf | lein trampoline run
Run Code Online (Sandbox Code Playgroud)
我的Clojure代码只读取第一行,使用read-line:
(defn -main
"Read a BF program from stdin and evaluate it."
[]
;; FIXME: only reads the first line from stdin
(eval-program (read-line)))
Run Code Online (Sandbox Code Playgroud)
如何阅读我用过的文件中的所有行?*in*似乎是一个实例java.io.Reader,但它只提供.read(一个字符),.readLine(一行)和read(char[] cbuf, int off, int len)(似乎非常低级别).
Joh*_*hnJ 10
将所有输入数据作为单个字符串读取非常简单:
(defn -main []
(let [in (slurp *in*)]
(println in)))
Run Code Online (Sandbox Code Playgroud)
如果您的文件可以适合可用内存,这可以正常工作; 懒惰地阅读大文件,看到这个答案.
你可以从*in*这样得到一个懒的seq行:
(take-while identity (repeatedly #(.readLine *in*)))
Run Code Online (Sandbox Code Playgroud)
或这个:
(line-seq (java.io.BufferedReader. *in*))
Run Code Online (Sandbox Code Playgroud)
这在功能上是相同的.
| 归档时间: |
|
| 查看次数: |
3622 次 |
| 最近记录: |