Wie in formlos sagen Sie, dass ein Beweis der leere Typ ist (d. h. falsch)

8

Ich möchte eine Funktion schreiben, die einen Nat als Parameter akzeptiert, und dieses nat NUR zurückgeben, wenn dieses nat nicht durch drei teilbar ist.

zum Beispiel:

%Vor%

Dazu muss ich etwas schreiben, das sagt "N ist nicht teilbar durch _3", oder "Mod.Aux [N, _3, _0] ist der leere Typ"

Wie kann ich das formlos machen?

    
Molochdaa 20.07.2014, 18:32
quelle

1 Antwort

10

Der einfachste Weg in diesem speziellen Fall ist wahrscheinlich die Verwendung von =:!= (obwohl Sie einen neuen Typparameter benötigen):

%Vor%

Ganz allgemein ist es nicht schwer, diese Art von Einschränkung als Typklasse auszudrücken:

%Vor%

Oder noch allgemeiner:

%Vor%

Beide Lösungen verwenden die gleiche Maschinerie wie =:!= (d. h. sie beruhen auf der Tatsache, dass der Scala-Compiler keinen impliziten Wert findet, wenn er zwei Kandidaten hat, die er nicht priorisieren kann).

Ich würde wahrscheinlich dazu neigen, mit dem zweiten Ansatz zu gehen, es sei denn, ich würde feststellen, dass ich für den gleichen Typ viele Einschränkungen wie diesen brauche. In diesem Fall könnte der dritte sauberer sein.

    
Travis Brown 20.07.2014, 19:41
quelle

Tags und Links