2009-05-09 22 views
1

Ich lerne, F #, und ich kam in einem Intellisense FehlerVisual Studio F # Fehler

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' 

Wer weiß, wie ich dieses Problem beheben?

Antwort

4

Wenn Sie diesen Code in eine interaktive Konsole eingeben, erwarten Sie, dass er die Antwort ausgibt. Aber in einem Programm müssten Sie eine Codezeile schreiben, die etwas mit dem von Ihrer fib-Funktion zurückgegebenen Wert ausführt. Gib entweder dem Ergebnis einen Namen oder schreibe es in die Konsole (die den Typ unit haben würde, d. H. "Aktion ohne Rückgabewert") oder so ähnlich.

+1

Oh ok, aus irgendeinem Grund dachte ich Einheit sagte Uint. – Unknown

0

Ich dachte, ich könnte hinzufügen, dass Sie Ihren Fibonacci-Rezidiv falsch definieren. Werfen Sie einen Blick hier auf den Code:

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

Jetzt können Karte diese Funktion über eine Liste:

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

Prozess wird wegen Stackoverflow beendet.

Sitzungsabbruch erkannt.

Drücken Sie die Eingabetaste, um neu zu starten.

Whoops.

Auch wenn ich meine Liste Verständnis anpassen nicht Null sind:

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

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

Wir tun etwas in der Nähe der Fibonacci-Sequenz erhalten, aber nicht die genaue Sequenz ... Sie werden vielleicht nicht denken, das ist wichtig für das Lernen, warum Ihr Intellisense Fehler ist aufgetreten ...

Aber schauen Sie genau auf diese man jetzt ... auch feststellen, dass ich verwende 'n' anstelle von '_':

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 es: int list = [0; 1; 1; 2; 3; 5; 8; 13; 21]

Jetzt ist das die richtige Reihenfolge.

+0

Ich kenne es nicht wirklich die Fibonacci-Sequenz. Mein Tutorial ist falsch. Warum auch n statt _ verwenden? Sie scheinen beide zu arbeiten. – Unknown

+0

Weil Sie passen auf n und nicht eine Art Variante ... – ninegrid

+0

n ist keine "Typ-Variante" es ist ein li –