Ich bin neu in F # und habe nirgends gesehen, wie man das Folgende richtig macht
%Vor%Ich muss das mit dem Mustervergleich machen - für Hausaufgaben - aber ich weiß nicht, wie ich das richtig machen soll. Ich dachte, ich könnte Tupel wie folgt verwenden:
%Vor%Aber das funktioniert auch nicht. Wie gehe ich vor?
Sie haben die richtige Idee, Sie haben nur vergessen, dass der Einzug in F # zählt. Das Hinzufügen von Leerzeichen führt zu einer Lösung:
%Vor%Dadurch werden Übereinstimmungen tatsächlich zweimal gemustert, daher sollten wir es vielleicht neu schreiben:
%Vor%Der Compiler / Interpreter wird dies durchlassen, aber mit einer Warnung:
Warnung FS0025: Unvollständiges Muster stimmt mit diesem Ausdruck überein.
Ich werde es als eine Übung loswerden: -)
PS. Schön von dir, dass du Hausaufgaben gemacht hast.
Søren Debois hat Recht. Hier sind ein paar andere Hinweise:
a
und b
sind bereits im Gültigkeitsbereich, Sie müssen also nicht mit ihnen übereinstimmen, Sie können mit allem abgleichen:
Aus diesem Grund ist die Verwendung einer if-Anweisung möglicherweise idiomatischer.
Sie vermissen eindeutig den Fall, wenn a + b = 0
; Beachten Sie, dass der Compiler immer davon ausgeht, dass eine when-Klausel möglicherweise nichts abdeckt. Daher erhalten Sie immer noch eine Warnung, dass einige Fälle möglicherweise nicht behandelt werden, selbst wenn Sie eine | () when a + b = 0 -> ...
case hinzufügen. Sie müssten stattdessen nur | () -> ...
oder | _ -> ...
verwenden.
Es gibt eine integrierte Verknüpfung für Definitionen der Form let f <pattern> = match <same pattern> with |...
, die let f = function |...
ist. Du würdest es benutzen wie:
Beachten Sie, dass nun a
und b
nicht an die Funktionsdefinition gebunden sind, so dass die Idee aus meiner ersten Notiz nicht gilt und Sie sie in das Muster einführen müssen.
Tags und Links f# pattern-matching tuples