我目前正在研究“Real Word OCaml”,带有命名/标记参数的基本示例之一似乎不起作用(使用 utop 4.01.0):
let languages = ["OCaml"; "Perl"; "C"];;
List.map ~f:String.length languages;;
产生:
Error: The function applied to this argument has type 'a list -> 'b list
This argument cannot be applied with label ~f
然而:
List.map String.length languages;;
产生预期的输出[5; 4; 1]
。
在核心语言中,与大多数语言一样,参数是匿名的。
这是否意味着我必须包含某种外部库才能使此代码正常工作?
编辑
这是我的~/.ocamlinit
文件(根据本书的安装说明):
(* Added by OPAM. *)
let () =
try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
with Not_found -> ()
;;
#use "topfind"
#camlp4o
#thread
#require "core.top"
#require "core.syntax"