【问题标题】:How to fix type error in F# function arguments如何修复 F# 函数参数中的类型错误
【发布时间】:2021-06-23 08:13:44
【问题描述】:

我有一个程序试图接收一个整数列表并返回一个包含所有奇数的整数列表,我是函数式编程的新手,正在尝试用 F# 学习它。当我尝试在main 中调用removeEvens 时,它给了我这个错误

Error   FS0001  This expression was expected to have type
    'int list -> 'a'    
but here has type
    ''b list'

这是我的代码

open System

let rec removeEvens arr count ret =
    if count < 0 then
        ret
    else
        if count % 2 = 0 then
            removeEvens arr (count + 1) ret
        else
            removeEvens arr (count + 1) (arr[count] :: ret)

let rec printResults arr count =
    if count > 0 then
        printfn "%d" (arr[count])
        printResults arr (count + 1)


[<EntryPoint>]
let main argv =
    printResults (removeEvens [0 .. 100] 0 []) 0
    0

【问题讨论】:

    标签: functional-programming f#


    【解决方案1】:

    从语法上讲,这里唯一的问题是索引运算符缺少. 字符。所以你想要arr.[count] 而不是arr[count](F# 编译器认为这是一个名为arr 的函数应用于单例列表,因此编译器错误)。为了使用索引,您还需要将 arr 值显式注释为列表,如下所示:(arr : List&lt;_&gt;)

    从语义上讲,您应该知道以这种方式对列表进行索引是低效的,但这是一个单独的问题。相反,我建议从列表中删除偶数的更优雅的方法是仅考虑递归函数中列表的头元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 2022-11-07
      相关资源
      最近更新 更多