【问题标题】:The type ''a list' does not support the operator '+'''a list' 类型不支持运算符 '+'
【发布时间】:2016-01-24 07:18:18
【问题描述】:

auxInner 下面返回一个 int 列表。但是当我在随后的inner 函数中调用List.sum(auxInner xs ys) 时,我得到了这个奇怪的错误! List.sum 不接受 int 列表吗?

let rec auxInner xs ys =
    match (xs, ys) with
    |([],[]) -> []
    |([], ys) -> ys
    |(xs, []) -> xs
    |(x::xs, y::ys) -> x*y::auxInner xs ys

let rec inner xs ys = 
    match (xs, ys) with
    |([],[]) -> []
    |([], ys) -> ys
    |(xs, []) -> xs
    |(xs, ys) -> List.sum(auxInner xs ys)

【问题讨论】:

    标签: f# functional-programming type-inference currying


    【解决方案1】:

    inner 的另一种模式返回一个列表,因此 List.sum(auxInner xs ys) 也必须返回一个列表。
    另一方面,List.sum 在类型上使用一些定义的 (+) 来进行求和。
    如前所述,该总和必须是一个列表,因此我们需要一种方法来以某种方式对列表进行求和。
    由于没有为列表定义 (+),您会收到该错误消息。

    很有可能您必须在匹配的每种情况下都返回一个 int 或在每种情况下都返回一个列表,可能是一个单例 [List.sum (auxInner xs ys)] 但没有上下文...

    【讨论】:

    • 谢谢!我对其进行了更改,以便每个模式都返回一个 int 而不是列表,所以现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多