我有这个简单的功能让我发疯:
它应该是这种类型的函数:
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
我不知道“选项”类型来自何处。
答案 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
函数。