Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types F#类型';整数列表';与类型';int';_Types_F# - Fatal编程技术网

Types F#类型';整数列表';与类型';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

我试图构造一个包含斐波那契数列的列表,但当我稍后尝试调用该函数时,它告诉我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 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项,此函数将引发异常

还要注意的是,这不能正常工作:它不能生成斐波那契序列。我会让你来解决的