"错误:使用命名参数时,应用于此参数的函数具有类型..."

Fra*_*itt 12 ocaml named-parameters utop

我目前正在使用"Real Word OCaml",其中一个带有命名/标记参数的基本示例似乎不起作用(使用utop 4.01.0):

let languages = ["OCaml"; "Perl"; "C"];;
List.map ~f:String.length languages;;
Run Code Online (Sandbox Code Playgroud)

生产:

Error: The function applied to this argument has type 'a list -> 'b list
This argument cannot be applied with label ~f
Run Code Online (Sandbox Code Playgroud)

鉴于:

List.map String.length languages;;
Run Code Online (Sandbox Code Playgroud)

产生预期的输出[5; 4; 1].

caml.inria.fr提到:

在核心语言中,与大多数语言一样,参数是匿名的.

这是否意味着我必须包含某种外部库才能使这段代码有效?

编辑 这是我的~/.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" 
Run Code Online (Sandbox Code Playgroud)

Fra*_*itt 7

正如@rafix的评论中所提到的,这可以通过put来修复

open Core.Std ;;
Run Code Online (Sandbox Code Playgroud)

第一.

  • 在较新的版本中,`Core.Std`被删除了.使用`open Core ;;`代替. (3认同)