Ocaml 此表达式的类型为unit,但表达式的类型应为string

Ocaml 此表达式的类型为unit,但表达式的类型应为string,ocaml,Ocaml,我是Ocaml的新手 我试图弄清楚如何将“单位”类型常量“强制转换”为“字符串”类型 我已经看到有string\u of_int函数使用整数类型执行此操作,但找不到“unit”类型的等价项。也许这和布尔运算有关,我使用Printf.Printf“%B”(x)但我还没有弄清楚在“单元”类型的情况下应该使用什么 下面是我的代码示例: 定义的功能: let displayList l=List.iter(fun x->print_string(string_of_int x^“))l 使用上述功能:

我是Ocaml的新手

我试图弄清楚如何将“单位”类型常量“强制转换”为“字符串”类型

我已经看到有
string\u of_int
函数使用整数类型执行此操作,但找不到“unit”类型的等价项。也许这和布尔运算有关,我使用
Printf.Printf“%B”(x)但我还没有弄清楚在“单元”类型的情况下应该使用什么

下面是我的代码示例:

定义的功能:

let displayList l=List.iter(fun x->print_string(string_of_int x^“))l

使用上述功能:

  • 下面的表达式起作用:
    let=displayList[5;5;6;5;5;6;3]
    in()并显示“5;5;6;5;5;6;3;”
  • 以下表达式不起作用:
    let\ux=print\u字符串(“[”^
    显示列表[5;5;6;5;5;6;3]^“])。它抛出错误消息
    “此表达式的类型为unit,但应为
    键入“字符串”

  • 您将打印的值和返回的值混为一谈

    显示列表
    不返回
    字符串
    。它打印一个
    字符串
    ,然后返回一个
    单元
    。字符串串联运算符(
    ^
    )需要两个
    字符串
    ,但如上所述,
    显示列表
    的返回类型是
    单元

    单元
    制作
    字符串
    并不能达到您所期望的效果<代码>显示列表
    仍将打印
    5;5.6.5.5.6.3;“[()]”

    如果您打算打印
    [5;5;6;5;5;6;3;]
    ,可以使用一个解决方案(使用您已有的)


    仔细地在多行上编写代码,这样您就可以开始看到哪个确切的子表达式产生了类型错误。一旦看到错误所在,您就不想再将
    unit
    转换为
    string
    ,但您将看到另一个要解决的问题。感谢您的澄清!对于以\n
    结束的记录,让rec显示listnobrackets l=if List.length l=0,然后打印字符串(“”),否则如果List.length l=1,则打印字符串(string of int(List.hdl))或者打印字符串(string of int(List.hdl)^;“”;如果List.length l>0,则显示listnobrackets(List.tl l)\n让DisplayListWithBracks l=print_char'[';DisplayListNoBracks l;print_char']'\n然后使用函数
    DisplayListWithBracks l
    DisplayListNoBracks
    可以正常显示,但所做的工作比需要的要多<代码>列表。长度
    需要线性时间,因此每次迭代都要遍历剩余的列表。您不需要知道完整长度就可以知道列表是否为空。避免此问题的更惯用方法是使用
    match
    ,如
    let rec displaylistnobrakets l=match l with |[]->…|头部:尾部->…
    let displayList l =
      print_char '[';
      List.iter(fun x -> print_string(string_of_int x^";")) l;
      print_char ']'
    ;;