Ocaml 此表达式的类型为unit,但表达式的类型应为string
我是Ocaml的新手 我试图弄清楚如何将“单位”类型常量“强制转换”为“字符串”类型 我已经看到有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 使用上述功能:
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 ']'
;;