2011-10-18 11 views
0

F#で大きなリストを印刷しようとしていますが、これは困難な時です。私はF#で字句解析ツールを作成しようとしています。私は完了したと信じていますが、チェックするためにリスト全体を印刷することはできません。ここFの大きなリストを印刷する

は、私は私が次

配列 [配列[[「キーワード」を取得し、リストを印刷しようとすると

let modifierReg = Regex("(public|private)"); 
let isModifier str = if (modifierReg.IsMatch(str)) then ["Modifier"; str] else ["Keyword"; str] 

let readLines filePath = seq { 
    use sr = new StreamReader (filePath:string) 
    while not sr.EndOfStream do 
     yield sr.ReadLine() } 

let splitLines listArray = 
    listArray 
    |> Seq.map (fun (line: string) -> let m = Regex.Match(line, commentReg) in if m.Success then (m.Groups.Item 1).Value.Split([|' '|], System.StringSplitOptions.RemoveEmptyEntries) else line.Split([|' '|], System.StringSplitOptions.RemoveEmptyEntries)) 

let res = 
    string1 
    |> readLines 
    |> splitLines 

let scanLines lexicons = 
    lexicons 
    |> Seq.map (fun strArray -> strArray |> Seq.map (fun str -> isModifier(str))) 

let printSeq seq = 
    printfn "%A" seq 

let scanner filePath = 
    filePath 
    |> readLines 
    |> splitLines 
    |> scanLines 

let scannerResults = scanner pathToCode 
printSeq scannerResults 

を行うにしようとしています何の一例です。 "クラス"]; ["識別子"; "A"]]]; seq [["ブロック"; "{"}]; seq [["修飾子"; "パブリック"]; ["タイプ"; "int"]; ["識別子"; "バツ;"]]; seq [["修飾子"; "パブリック"]; ["タイプ"; "int"]; ["識別子"; "y;"]]; ...]

これ以上印刷することはできません。私はそれをオフに印刷する方法を見つけ出すように見えることはできません、次の

printfn "%a" [1 .. 101]] 

のような単純なもので同じ動作を得ます。誰でもこれに関する経験はありますか?私は例を見つけることができないようです。

答えて

4

Seq.iterは、シーケンスのすべての要素に対して繰り返します。

somelist|> Seq.iter (printfn "%A") 

各要素が印刷されます。 ( "%A"指定子は、任意のデータを印刷するのによく適していますが、大規模なリストやその他のものでは、すべての要素を繰り返し、それぞれを個別に印刷するなど、細かい制御を行うことができます。 )

+0

これは完璧に機能しました。 –

1

あなたはリストを使っていません。あなたはシーケンスを扱っています。シーケンスは無限大でもよいので、printfと友人は最初のN個の要素のみを出力します。意味をなさない

+0

'printf'はリストと配列も切り捨てます。 –

+0

真。しかし配列よりもはるかに長い配列/リストを扱います。 – Daniel

0

ブレインとダニエルはすでにあなたの質問に答えています。私は、%Aは、printfn関数に渡されたオブジェクトを印刷するために反射を使用すると付け加えます。あなたの場合、それは単なるアイテムのリストではなく、むしろリストのリストのリストであり、基本的にはツリーです。このツリーが大きすぎる場合、printfn "%A"はパフォーマンス上の問題があり、ツリーを横断して印刷する独自の印刷機能を作成する必要があります。

+0

「脳」?ええ、彼はスマートに見えますが、実際は...-) – Daniel

関連する問題