JBa*_*low 2 ocaml list fold higher-order-functions
编写一个Ocaml函数list_print : string list -> unit,从左到右打印列表中的所有字符串:
所以让我们说我有一个Ocaml函数list_print: string list -> unit可以打印从左到右的列表中的所有字符串.现在正确的解决方案是:
let list_print lst = List.fold_left (fun ( ) -> fun s -> print_string s) () lst;;
Run Code Online (Sandbox Code Playgroud)
但在编写我的解决方案时,我是这样编写的:
let list_print lst = List.fold_left (fun s -> print_string s) () lst;;
Run Code Online (Sandbox Code Playgroud)
但这给了我
错误:此表达式具有类型单位,但表达式需要类型为"a - > string"
为什么在乐趣之前我需要第一个参数fun() - >?我还是Ocaml的新手,所以这种类型的系统让我很困惑
fold_left(和fold_right)的目的是随着你的进展积累一个值.额外参数是此累计值.
您可以使用List.iter您的问题.它不会累积值.
您可以将其List.iter视为List.fold_left累积值类型的版本unit.事实上,你可以这样实现它:
let iter f = List.fold_left (fun () a -> f a) ()
Run Code Online (Sandbox Code Playgroud)
点(一如既往unit)是该类型只有一个值,因此它表示值不感兴趣的情况.