繁体   English   中英

Visual Studio F#错误

[英]Visual Studio F# Error

我正在学习F#,我遇到了一个智能感知错误

let rec fib n = 
    match n with
    | 1 -> 1
    | 2 -> 2
    | _ -> fib(n-1) + fib(n-2)

fib 6 <-- This line says "This expression should have type 'unit', but has type 'int'

有谁知道我怎么解决这个问题?

如果您在交互式控制台中键入该代码,则可以打印出答案。 但是在一个程序中,你需要编写一行代码来处理你的fib函数返回的值。 要么给结果命名,要么将其写入控制台(具有类型unit ,即“没有返回值的动作”),或类似的东西。

我想我可能会补充一点,你错误地定义了你的斐波那契复发。 看看你的代码:

let rec fib n =
    match n with
    | 1 -> 1
    | 2 -> 2
    | _ -> fib(n-1) + fib(n-2);;

现在让我们将这个函数映射到列表:

[0 .. 8] |> List.map fib

由于StackOverflowException,进程终止。

检测到会话终止。

按Enter重新启动。

哎呦。

即使我将列表理解调整为不包括零:

[1 .. 8] |> List.map fib

val it:int list = [1; 2; 3; 5; 8; 13; 21; 34]

我们确实得到了一些接近斐波纳契序列的东西,但没有接近确切的序列......你可能认为这对于了解为什么你的智能感知错误发生了很重要...

但是现在仔细看看这个...还注意到我使用的是'n'而不是'_':

let rec fib n =
    match n with
    | 0 -> 0
    | 1 -> 1
    | n -> fib(n-1) + fib(n-2);;

val fib:int - > int

[0 .. 8] |> List.map fib;;

val it:int list = [0; 1; 1; 2; 3; 5; 8; 13; 21]

现在这是正确的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM