[英]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.