Wie suche ich nach Mustern in einer beliebigen Reihenfolge?

Regex ist nur für Zeichenfolgen verfügbar, aber was ist, wenn diese Funktionalität nicht nur auf Zeichen, sondern auch auf Objekte oder sogar auf Funktionen erweitert werden kann? Angenommen, unsere Objekte sind ganze Zahlen und können in beliebiger Reihenfolge vorliegen:

1 2 3 4 5 6 7 8 9 10 11 12 13

Und die Aufgabe, die Sie lösen möchten, ist es, @ zu findprime pairs (oder eine ähnliche Mustersuchaufgabe) wie folgt:

{prime}{anyNumber}{prime}

So lautet die Antwort:

(3,4,5) (5,6,7) (11,12,13)

Oder ein etwas komplexeres Beispiel für eine Kette von Primzahlen:

{prime}({anyNumber}{prime})+

Antworten

(3,(4,5),(6,7)) (11,(12,13))

Pretty ähnlich wie Regex arbeiten, oder?

Was passiert, ist, dass Sie eine Funktion mit dem Namen @ definierisPrime (x) und verwenden Sie es, wenn Sie prüfen müssen, ob das nächste Eingabeelement tatsächlich Primzahl ist (es ist also eine Art Gleichheit mit Objekt oder Objektraum)

Was ich bisher erstellt habe

Ich erschuf ObjectRegex Klasse ähnlich wie Regex Klasse in C #. Es akzeptiert die obigen Muster und führt das zugehörige Prädikat aus, um das Objekt zu identifizieren. Es funktioniert einwandfrei, aber das Problem ist, dass es mit jeder Sequenz vom Typ @ funktionier TValue sollte in @ konvertiert werd string, bevor es an Regex-Muster übergeben wird, und dafür sollte ich ALLE Prädikate auf die gesamte Sequenz anwenden. O (n * m) ist immerhin eine schlechte Idee ....

Ich habe beschlossen, es auf die harte Tour zu umgehen und ... zu versuchen, einen String zu erben, der versiegelt ist und dessen Vererbung verboten ist. Was von dieser geerbten Klasse benötigt wird, ist override accessor

char this[int index] {get;}

zu Gunsten einer verzögerten Ausführung von Prädikaten zu einem Zeitpunkt, zu dem es tatsächlich Sinn macht.

Also, eine Idee, wie man es macht? Ich liebe .NET Regex und seine Syntax. Gibt es eine Möglichkeit, diese String-Fluch- und Täuschungs-Engine zu umgehen? Überlegungen vielleicht oder irgendein Hardcore, den ich nicht kenne?

Update 1

Ich habe diesen Artikel gefundenhttp: //www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-tim und denke, es kann durch Ersetzen dieser [int index] -Methode durch meinen Code geschehen, aber ich denke, es wird alles andere beschädigen, weil Sie die Methode nur für eine Instanz nicht ersetzen können.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage