Ocaml:带有'选项错误的函数

时间:2016-11-13 21:17:53

标签: ocaml

我有这个简单的功能让我发疯:

它应该是这种类型的函数:

function jq( myid ) {
 return myid.replace( /(:|\.|\[|\]|,|=)/g, "\\$1" );
}

 var filename = "\\server\folder\file1";
  var filenamescaped = jq(filename);

对于第一个参数的每个元组:

当第二个参数与元组的第一个元素匹配时,该函数返回元组中列表的最后一个元素。

如果没有匹配,则应返回-1。

myfunction : (int * int list) list -> int -> int

但我的功能不起作用,我在utop中有这个错误信息:

let rec myfunction  alist anum =
  let last_e l =
    let len = List.length l in
    List.nth l (len - 1) in
  match alist with
  | [] -> -1
  | (n , ln) :: q -> if n = anum then last_e ln
  else myfunction q anum

我不知道“选项”类型来自何处。

1 个答案:

答案 0 :(得分:3)

如果您使用某些OCaml顶级(例如utop)并且您的.ocamlinit文件中有这些行

,就会发生这种情况
#require "core.top" ;;
open Core.Std ;;

这将启用核心库,其中List.nth具有类型:

μ> List.nth;;
- : 'a list -> int -> 'a option = <fun>

而不是标准OCaml的List.nth : 'a list -> int -> 'a

所以,当你启动你的顶层并说:

μ> #use "myfunction.ml";;

你得到了问题中引用的相同错误。

顺便说一下,如果你想继续使用Core,那就有一个List.last函数。