0

我正在尝试从通过 ocaml 中的 stdinput 传入的文件中读取字符。我想知道为什么当我可以 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

您的代码不会修改charList,因此charList在整个执行过程中仍然是一个空列表。

此外,如果您定义 let charList = []thencharList是不可变的。

您可以尝试以下方法:

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 回答