Functional programming 如何修复F#函数参数中的类型错误

Functional programming 如何修复F#函数参数中的类型错误,functional-programming,f#,Functional Programming,F#,我有一个程序,它试图接受一个整数列表,并返回一个包含所有奇数的整数列表。我对函数式编程不熟悉,正在尝试用F#来学习它。当我尝试调用main中的removevens时,会出现此错误 Error FS0001 This expression was expected to have type 'int list -> 'a' but here has type ''b list' 这是我的密码 开放系统 让rec移除evens arr count ret= 如果

我有一个程序,它试图接受一个整数列表,并返回一个包含所有奇数的整数列表。我对函数式编程不熟悉,正在尝试用F#来学习它。当我尝试调用
main
中的
removevens
时,会出现此错误

Error   FS0001  This expression was expected to have type
    'int list -> 'a'    
but here has type
    ''b list'
这是我的密码

开放系统
让rec移除evens arr count ret=
如果计数小于0,则
ret
其他的
如果计数%2=0,则
移除风机arr(计数+1)ret
其他的
移除事件arr(计数+1)(arr[count]::ret)
让rec打印结果arr计数=
如果计数>0,则
打印fn“%d”(arr[计数])
打印结果arr(计数+1)
[]
让主argv=
打印结果(RemoveEvents[0..100]0[])0
0

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


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

,这里唯一的问题是索引运算符丢失了<代码> ./COD>字符。因此,您需要
arr[count]
而不是
arr[count]
(F#编译器认为这是一个名为
arr
的函数对单例列表的应用,因此编译器错误)。为了使用索引,还需要将
arr
值显式注释为列表,如下所示:
(arr:list)

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