2009-02-03 46 views

回答

4
Seq.initInfinite (fun _ -> Console.ReadLine()) 
5

它並不過分漂亮,但它按預期工作:

let rec ConsoleLines() = 
    seq { 
     match Console.ReadLine() with 
     | "" -> yield! Seq.empty 
     | x -> yield x; yield! ConsoleLines() 
    } 
4
let ConsoleLines = 
    seq { 
     let finished = ref false 
     while not !finished do 
      let s = System.Console.ReadLine() 
      if s <> null then 
       yield s 
      else 
       finished := true 
    } 

(請注意,您必須使用REF//:!=做一個序列表達式中的可變狀態。)

2
let consoleLines = Seq.takeWhile ((<>) "") (seq { while (true) do yield System.Console.ReadLine() }) 
2

稍有不同:

let readLines (sr:TextReader) = 
    Seq.initInfinite (fun _ -> sr.ReadLine()) 
    |> Seq.takeWhile (fun x -> x <> null) 

let consoleLines() = 
    readLines Console.In