2017-10-05 3 views
-2

Ich versuche, meine ersten zwei Element auf meiner Liste,OCaml Spiel Fehler

Ich bekomme Fehler in der dritten Zeile, warum ist das?

let addfirsttwo lst = 
    match lst with 
    | List.hd lst + List.hd (List.tl lst) 
;; 
+2

Was ist der Fehler? Bitte fügen Sie es in den Fragetext und vielleicht den Titel ein. (Denken Sie an Leute, die versuchen, eine Lösung für das gleiche Problem zu finden) – user5226582

Antwort

1

Sie mischen zwei verschiedene Ansätze zum Extrahieren von Informationen aus einer Liste. Einer verwendet List.hd und List.tl, der andere ist Mustervergleich.

Mit dem ehemaligen sind Sie fast fertig. Sie haben wie so das Muster Matching loszuwerden:

let addfirsttwo lst = 
    List.hd lst + List.hd (List.tl lst) 

ich jedoch davon ausgehen, dass Ihre Frage zu einem gewissen Hausaufgaben betrifft, wo List.hd und List.tl verboten sind. Und überhaupt ist die Mustererkennung nützlich, um zu wissen. Das Problem mit Ihrem Code ist also, dass Sie den Mustervergleich nicht abgeschlossen haben. Eine Mustervergleichsklausel hat die Form

| <some pattern> -> <some expression> 

Das Muster enthält normalerweise Variablen, die Sie dann im Ausdruck verwenden können. Eine Möglichkeit, List.hd zu definieren, zum Beispiel, ist

let hd list = match list with 
| head::tail -> head 

Ihre Klausel wurde das tatsächliche Muster fehlt und die ->. Eine weitere Möglichkeit, Ihren Code zu beheben, zumindest die Syntax, wäre gewesen, wie so die fehlenden Teile liefern:

let addfirsttwo lst = 
    match lst with 
    | _ -> List.hd lst + List.hd (List.tl lst) 

wo _ als Platzhalter fungiert, die einen beliebigen Wert überhaupt wird übereinstimmen und keine Variablen binden. Es würde jedoch die angenommene Hausaufgabenbeschränkung nicht lösen.

Es ist erwähnenswert, dass das Muster, das ich für hd angegeben habe, nicht mit allen Werten übereinstimmt. Es passt nur Listen mit einer Länge von mindestens 1 an. Das ist in Ordnung, da List.hd nur nicht leere Listen unterstützen muss. Ihre Funktion muss nur Listen mit einer Länge von mindestens 2 unterstützen. Ein guter Ausgangspunkt für Sie wäre also ein Muster, das solchen Listen entspricht.