Mailinglisten-Archive |
Hallo Norbert, > es werden verschiedene Test gemacht und deren Ergebnisse stehen > in in zwei Array's. Nix kompliziertes nur immer 1/0. Dann bastel > ich daraus einen Querystring der sieht ungefaehr so aus: > ((0 || 0 || 1) && 1 && 0 && !1 && !1) - Beispiel fuer 'false' > ((0 || 0 || 1) && 1 && 1 && !0 && !0) - Beispiel fuer 'true' > Wobei die Anzahl der Elemente beliebig ist. > > Nun faellt mir derzeit jedoch nix ein, wie ich den ResultWert > des Querys ermitteln koennte, ausser mit Hilfe von eval(); > > Hat da jemand eventuell eine Idee dazu ... ich sage nur: Strukturelle Reduktion Soll heißen: du reduzierst die Werte immer nach entsprechenden Regeln. Da du nur 0 und 1 hast ist das ganze auch recht übersichtlich machbar. Du musst halt nur deine logischen Verknüpfungen genau definieren. !0 -> 1 !1 -> 0 0 || 0 -> 0 1 || 0 -> 1 ... Dann musst du noch mit den Klammern und verkürzten Schreibweisen fertig werden: (a || b || c) -> (a || (b || c)) (a && b && c) -> (a && (b && c)) ... (0) -> 0 (1) -> 1 Das einzige Problem an der Sache ist jeweils das "matching" ob ein (Teil-)Ausdruck auf eine Regel passt. Unter [1] habe ich mal einen Lamdaterm-Reduzierer (JavaScript) verlinkt. Vielleicht kannst du dir dort was abguggen. Um dir das mal zu demonstrieren, verwende ich eines deiner Beispiele mal für eine Demonstration: ((0 || 0 || 1) && 1 && 0 && !1 && !1) = ((0 || (0 || 1)) && 1 && 0 && 0 && 0) = ((0 || (1)) && (1 && (0 && (0 && 0)))) = ((0 || 1) && (1 && (0 && (0 && 0))) = (1 && (1 && (0 && (0 && 0)))) = (1 && (1 && (0 && (0)))) = (1 && (1 && (0 && 0))) = (1 && (1 && (0))) = (1 && (1 && 0)) = (1 && (0)) = (1 && 0) = (0) = 0 Ich denke allerdings, dass das hier viel zu oversized ist und deine eval()-Methode viel besser geeignet ist ;-) Grüße, Niels 1: http://ellemose.dina.kvl.dk/~sestoft/lamreduce/lamframes.html P.S.: mit einer funktionalen Programmiersprache wie Haskell wäre sowas ganz einfach ;-) P.P.S.: falls das etwas mit Suchlogik zu tun hat wäre es vielleicht einfacher die befragte Datenbank diese Anfrage auflösen zu lassen...
php::bar PHP Wiki - Listenarchive