2009-06-30 10 views
1

私は、呼び出される入力ストリームからトークンを1つ読み込み(get-next-indicator stream indicator)、それを返します。私はマップを作成するためにそれを使用しようとしています。ストリームロックからのClojure関数の読み込み

しかし、私がそれを実行すると、ロックアップします。 get-next-indicator関数の1つを削除しても機能します。 両方の関数が同時にストリームを読み込もうとしていますか?これは何が原因ですか?


(defn decode-map [ stream ] 
    (loop [result {}] 
    (let [c (char (.read stream))] 
     (if (= c \e) 
     result 
     (recur (assoc result (get-next-indicator stream (int c)) 
          (get-next-indicator stream (int c)))))))) 
+0

"ロックアップ"とはどういう意味ですか?エラーメッセージはありますか? – Svante

+0

エラーメッセージが表示されません。 2番目の呼び出しを "e"と言ってget-next-indicatorに置き換えた場合、期待通りのマップが生成されますが、それは私のスニペットのように呼び出されます。何も起こりません。エラーも例外ではありません。 –

+0

get-next-indicatorに副作用がありますか?そのコードも投稿してください。 – Kai

答えて

1

取得するストリームに何もない場合、ちょうど推測ですが、get-next-indicatorブロックはありますか?あなたは反復の前にそれを2回連続して呼び出しています(そして、その後、.readを実行して終了を検出します)。 get-next-indicator呼び出しのいずれかの間にストリームのバイト数が不足した場合、関数はハングし、ストリームを終了するのに十分なバイト数を待機します。

関連する問題