我正在编写我的第一个clojure程序,并希望从stdin读取行.
当我尝试这个:
(doall (map #(println %) (line-seq *in*)))
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
Exception in thread "main" java.lang.ClassCastException: clojure.lang.LineNumberingPushbackReader cannot be cast to java.io.BufferedReader (test.clj:0)
Run Code Online (Sandbox Code Playgroud)
我在版本1.0和1.1中得到了相同的结果
那么如何转换*in*为seq我可以迭代?我会认为这很常见,*in*本身可以迭代,但这也不起作用 - 如果我尝试直接使用它,我得到:
java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.LineNumberingPushbackReader (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)
另外,有没有在clojure中进行常规文件处理的例子?
在clojure中将一个非常大的文件(比如每行一个有10万个名字的文本文件)读入一个列表(懒惰地 - 根据需要加载它)的最佳方法是什么?
基本上我需要对这些项进行各种字符串搜索(我现在用shell脚本中的grep和reg ex做).
我尝试在结尾添加'(在开头和结尾),但显然这个方法(加载一个静态?/常量列表,由于某种原因有一个大小限制.