I am trying to print a large list with F# and am a difficult time. I am trying to create a lexical analyzer in F# I believe I am done but I can’t seem to get it to print the entire list to check it.
here is an example of what I am trying to do
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
When I try to print the list I get the following
seq
[seq [[“Keyword”; “class”]; [“Identifier”; “A”]]; seq [[“Block”; “{“]];
seq [[“Modifier”; “public”]; [“Type”; “int”]; [“Identifier”; “x;”]];
seq [[“Modifier”; “public”]; [“Type”; “int”]; [“Identifier”; “y;”]]; …]
I can’t get it to print any further. I get the same behavior with something as simple as the following
printfn "%a" [1 .. 101]]
I can’t seem to figure out how to print it off. Anyone have any experience with this? I can’t seem to find any examples
Seq.iterwill iterate over all the elements of a sequence, so e.g.will print each of the elements. (The “%A” specifier is good at the common case for printing arbitrary data, but for large lists or whatnot, you can exercise finer control, as here, by iterating over every element and printing each individually, e.g. on a new line as above.)