An dieser Stelle "ToFraction(m??) := m[1]+m[2]" ist das ?? fehl am Platz, ? reicht hier.
Die Nachstellung von ? bedeutet, dass der Platzhalter genau
ein Argument aufnimmt.
Die Nachstellung von ?? bedeutet, dass der Platzhalter
ein oder mehr Argument aufnimmt.
Im zweiten Fall würde der Platzhalter dann eine Sequence()-Ausdruck werden, um ihn zu benutzen.
Wann ist das nützlich? Zum Beispiel hier, für die Definition eines Mittelwerts, der aber ausdrücklich eine Liste verlangt:
Wenn ich nun Mean({1,2,3}) aufrufe, belegt die Mustererkennung das "x" mit "1,2,3" und ersetzt es dementsprechend im hinteren Ausdruck, der dann zu Plus(1,2,3)/Length({1,2,3}) wird, also 6/3 = 2.
Anderes Beispiel wäre, Max() mit beliebig vielen Argumenten:
Wenn ich nun Max(1,2,-3) aufrufe, wird "x" mit "1,2,-3" belegt und ergibt somit: Sort({1,2,-3})[-1] wobei [-1] dann das letzte Element nach der Sortierung zurück gibt, also 2.
(Natürlich bräuchte ich nicht alles sortieren, aber das ist ja nur ein Beispiel)
Btw: Sequence ist nicht gleichbedeutend mit einer Liste, falls das gerade im Kopf schwirrt.