OCaml特殊字符格式?

OCaml特殊字符格式?,ocaml,Ocaml,我有以下ocaml代码: let rec c_write =

我有以下ocaml代码:

let rec c_write =                                                                                                                                                                                                                                                                                           
  "printf(\" %d \");\n"
在解释器中调用此函数时,我希望得到输出 printf(“%d”);接着是一个新行,但我得到了

printf(\%d\”)\n


在不使用任何其他I/O函数的情况下调用函数时,如何获得预期的输出

由于您正在使用顶级打印机进行打印,并且您需要非常特定的格式,因此需要安装自定义打印机。 以下将起作用:

# #install_printer Format.pp_print_string;;
# " This \" is not escaped " ;;
- : string =  This " is not escaped 

但是,这很可能不是您试图解决的问题。

表达式
let rec c\u write=“printf(\%d\”);\n“
不是函数。它是一个
string
类型的值,绑定到名为
c_write
的变量。所以在代码中没有使用任何I/O函数

当输入交互式顶层时,该值由解释器评估循环打印,以方便用户。与Python解释器为您打印刚刚输入的值时相同

通常,OCaml顶级解释器选择的表示与用于在文件中存储值或打印值的表示无关。此外,在OCaml中,没有规范表示

如果您想编写一个打印C printf语句的函数,那么这就是OCaml中的情况

let print_printf () = 
  print_endline {|printf("%d");|}
在上面的示例中,我使用了
{| |}
来表示一个sting文本,而不是更常见的
,因为在这个文本中不需要转义特殊字符,它们是按字面解释的(即,没有任何特殊含义)

您可以使用常规的
引号来表示它,从而获得相同的结果

let print_printf () = 
  print_endline "printf(\"%d\");"
下面是使用以下定义的顶级交互示例:

# let print_printf () = 
  print_endline {|printf("%d");|};;
val print_printf : unit -> unit = <fun>

# print_printf ();;
printf("%d");
- : unit = ()

# let print_printf () = 
  print_endline "printf(\"%d\");";;
val print_printf : unit -> unit = <fun>

# print_printf ();;
printf("%d");
- : unit = ()
#让print_printf()=
print|endline{| printf(“%d”);|};;
val print_printf:单位->单位=
#print_printf();;
printf(“%d”);
-:单位=()
#让print_printf()=
打印\u结束行“printf(\%d\”;”;;
val print_printf:单位->单位=
#print_printf();;
printf(“%d”);
-:单位=()
如果您将此代码放入一个文件中,编译、执行并重定向到一个C文件中,那么它将是一个格式良好的C文件(模块化函数体的缺失)