0

ocamlのstdinputを介して渡されたファイルからcharを読み取ろうとしています。次のコードで受け取ったcharをprint_charできるのに、なぜユニットを取得し続けるのか疑問に思いました。また、現在機能しないこれらのキャラクターのリストを作成しようとしています。

let () =
let charList = [] in 
let inchar = open_in Sys.argv.(1) in
    try 
            while true do
                let c = Char.uppercase(input_char inchar) in
                    print_char c; print_int (List.length charList);c::charList
            done
    with End_of_file -> close_in inchar;(*; print_int (List.length charList); printTest charList;*)

;;

4

2 に答える 2

5

コードは変更されないためcharListcharList実行全体を通して空のリストのままになります。

さらに、定義する と不変にlet charList = []なります。charList

あなたはこれらの線に沿って何かを試みるかもしれません:

let () =
    let charList = ref [] in
    let inchar = open_in Sys.argv.(1) in
  try
    while true do
      let c = Char.uppercase (input_char inchar) in
            charList := c :: !charList
    done
  with End_of_file ->
        charList := List.rev !charList;
        close_in inchar;
        print_int (List.length !charList);
        List.iter print_char !charList

さらにいくつかのコメント:

于 2012-07-26T05:45:34.270 に答える
1

もっと機能的なものを試してみてください:

let rec read inchar char_list =
  try
    read inchar ((Char.uppercase (input_char inchar))::char_list)
  with End_of_file -> char_list

let () =
  let inchar = open_in Sys.argv.(1) in
  let char_list = read inchar [] in
  close_in inchar
于 2012-07-30T10:07:36.173 に答える