9

Clojure でBrainf***インタープリターを作成しています。stdin を使用してプログラムを渡したい。ただし、後でユーザー入力のために標準入力から読み取る必要があります。

現在、私はこれをやっています:

$ cat sample_programs/hello_world.bf | lein trampoline run

私の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)))

パイプインしたファイル内のすべての行を読み取るにはどうすればよいですか? *in*のインスタンスのようですが、それは(1 文字)、(1 行)、および(非常に低レベルのようです)java.io.Readerしか提供しません。.read.readLineread(char[] cbuf, int off, int len)

4

2 に答える 2

10

*in*次のように行の遅延シーケンスを取得できます。

(take-while identity (repeatedly #(.readLine *in*)))

またはこれ:

(line-seq (java.io.BufferedReader. *in*))

機能的に同一です。

于 2013-12-29T14:00:55.327 に答える