0

我正在努力找出为什么下面的代码不起作用。

假设我为通用类型定义了一个函数 Map(如 List.Map)。

type Uni = Iu of int
            | Flu of float
            | Su of string
            | Bu of bool
            | Lu of Uni List
            | Fu of (Uni -> Uni)

let uMap : Uni -> Uni -> Uni =
    fun (Fu f) (Lu xs) -> Lu (List.map f xs)

效果很好,现在我正在尝试调用该函数,但我的代码似乎与函数签名不匹配。

uMap (Fu(fun (Iu(x)) -> Iu(x) + Iu(1))) (Lu([Iu(2); Iu(3); Iu(4)]))

错误来自应用于映射的函数(第一个参数),更具体地说,来自Iu(1)内部(Fu(fun (Iu(x)) -> Iu(x) + Iu(1)))

错误 FS0584:连续的模式应该用空格分隔或元组

我应该如何使用这个功能?我似乎找不到任何问题。

4

1 回答 1

4

我想你实际上想要

uMap (Fu(fun (Iu(x)) -> Iu(x + 1))) (Lu([Iu(2); Iu(3); Iu(4)]));;

你的一些括号在错误的地方,我认为你Iu(x) an Iu(1)在你的意思x1分别的地方使用了。

于 2013-09-11T06:54:31.307 回答