到目前为止,我的实施我似乎无法理解问题出在哪里
let uncurry_test1 _test_ctxt =
assert_equal
uncurry f (4 3)
7
assert_equal
OUnit2 库中的函数具有类型,
val assert_equal :
?ctxt:test_ctxt ->
?cmp:('a -> 'a -> bool) ->
?printer:('a -> string) ->
?pp_diff:(Format.formatter -> ('a * 'a) -> unit) ->
?msg:string -> 'a -> 'a -> unit
只有两个非关键字参数,但您将其应用于四个。我建议您至少阅读OCaml 教程并了解如何在 OCaml 中应用函数。例如,(4 3)
OCaml 中的一段代码表示 apply 4
to 3
,其中“将 F 应用于 Y”表示使用参数 X 调用函数 F。显然,4
它不是一个函数(剧透,它是一个数字),所以这段代码没有有意义并引发类型错误。
很难从您提供的信息中猜出什么是类型uncurry
和类型f
,但可能您的意思是这样的,
assert_equal 7 (uncurry f 4 3)
这就是说,7
当我们取消函数f
并将其应用于4
and时,我们期望3
。
f
大概在哪里curry (+)