为什么我不能在OCaml中再次打印此输入?

为什么我不能在OCaml中再次打印此输入?,ocaml,Ocaml,我对OCaml非常陌生,正在尝试同时学习和编写一个程序。我正在写一个回文程序。我正试图从用户那里获取一个字符串,例如deved或Hello World或loud以上所有内容都是有效的用户输入。我需要读取这些字符串并显示它们,然后反转它们并检查它是否是回文。我做了以下代码 print_string "Enter a string: "; let str = read_line () in Printf.printf "%s\n" str;; Printf.printf "%s\n" str;;

我对OCaml非常陌生,正在尝试同时学习和编写一个程序。我正在写一个回文程序。我正试图从用户那里获取一个字符串,例如
deved
Hello World
loud
以上所有内容都是有效的用户输入。我需要读取这些字符串并显示它们,然后反转它们并检查它是否是回文。我做了以下代码

print_string "Enter a string: ";
let str = read_line () in
Printf.printf "%s\n" str;;

Printf.printf "%s\n" str;;
这可以很好地工作,并且可以打印,
输入字符串:d e v e d
输入字符串:Hello World当我尝试添加另一个
Printf.Printf“%s\n”str;时出现问题输入到代码中。它给了我一个
文件“main.ml”的错误,第5行,字符21-24:

错误:未绑定值str
,第5行是第2条
Printf.Printf
语句的行。我已经试过了,没有
因为您在
中使用了
,您的代码解析为:

(let str = read_line () in Printf.printf "%s\n" str);;
然后是一个完全独立的:

Printf.printf "%s\n" str;;
因此
str
是第一个
printf
的本地值

你想要:

let str = read_line ();;
Printf.printf "%s\n" str;;
Printf.printf "%s\n" str;;

这是三个不同的定义。第一个定义了一个全局变量
str

,因为您在
中使用了
,您的代码解析为:

(let str = read_line () in Printf.printf "%s\n" str);;
然后是一个完全独立的:

Printf.printf "%s\n" str;;
因此
str
是第一个
printf
的本地值

你想要:

let str = read_line ();;
Printf.printf "%s\n" str;;
Printf.printf "%s\n" str;;

这是三个不同的定义。第一个定义了一个全局变量
str

,也可以发布给您带来麻烦的代码。@norok2我发布了,只是没有发布额外的Printf语句。我在下面的一段代码中清楚地定义了这一点。这就是我所有的密码。只有5行。也可以发布给您带来麻烦的代码。@norok2我发布了,我只是没有发布额外的Printf语句。我在下面的一段代码中清楚地定义了这一点。这就是我所有的密码。只有5行。