Types F#类型';整数列表';与类型';int';
我试图构造一个包含斐波那契数列的列表,但当我稍后尝试调用该函数时,它告诉我int list与int不匹配Types F#类型';整数列表';与类型';int';,types,f#,Types,F#,我试图构造一个包含斐波那契数列的列表,但当我稍后尝试调用该函数时,它告诉我int list与int不匹配 let rec fibonacci x list = if List.head list > x then List.tail list else fibonacci x (List.append (List.head list + (List.head (List.tail list))) list) let x = 10 let list = [1;2] let
let rec fibonacci x list =
if List.head list > x then List.tail list
else fibonacci x (List.append (List.head list + (List.head (List.tail list))) list)
let x = 10
let list = [1;2]
let fibonacciList = fibonacci x list
printf "%A" fibonacciList
它表示编辑器位于最后第二行的函数调用中。我不熟悉F#,我确信这是一个基本定义错误,但当您删除对
fibonacci
函数的调用时,我不知道这是什么,编译器实际上揭示了真正的错误:error FS0071:为类型推断变量应用默认类型“a list”时,类型约束不匹配。“a”和“a列表”类型无法统一。考虑添加其他类型约束
这很难理解,但基本上实现中存在一些问题。我认为问题在于你使用了List.append
。它应该包含两个列表,但您为它提供了一个int
和一个int list
。您可以使用:
运算符将一项添加到列表的前面:
let rec fibonacci x list =
if List.head list > x then List.tail list
else fibonacci x ((List.head list + (List.head (List.tail list))) :: list)
下面是使用模式匹配简化代码的等效实现:
let rec fibonacci x list =
match list with
| a :: b :: rest ->
if a > x then b :: rest
else fibonacci x (a + b :: list)
请注意,编译器警告匹配案例不完整。如果列表中的项少于2项,此函数将引发异常
还要注意的是,这不能正常工作:它不能生成斐波那契序列。我会让你来解决的