0

Can someone help me explain why I have a syntax error at this line: let wordMap = StringMap.empty? This is contained in an .mll file. The module StringMap is defined above.

let lexbuf = Lexing.from_channel stdin in
    let wordlist =
        let rec next l = match token lexbuf with
            EOF -> l
            | Word(s) -> next (s :: l)
        in next []

    let wordMap = StringMap.empty in 
        let wcList  = StringMap.fold (fun word count l -> (string_of_int count ^ " " ^ word) :: l) wordMap [] in 

        List.iter print_endline wcList;;

I know it prints nothing, this is just for testing.

4

3 に答える 3

0

この種の問題に対する黄金律: 適切なインデント ツール、caml-mode、tuareg-mode、または ocp-indent を使用します。これらのツールが意図したものとは異なるインデントを表示する場合、多くの場合、構文エラーが発生しています。

于 2015-10-07T08:07:18.460 に答える
0

に問題がありますlet-bindings。以下のように書き換えると、これは機能するはずです。

    let main () =
      let lexbuf = Lexing.from_channel stdin in
      let wordlist =
         let rec next l = match token lexbuf with
            EOF -> l
          | Word s -> next (s :: l) in
         next [] 
      in
     wordlist

   let wordMap = StringMap.empty

関数は結果としてmain返します。wordList

于 2015-10-07T07:27:22.327 に答える