sagen, dass ich einen Typ für Sätze Prop
machen müssen:Folding Set ein neues Set
type Prop =
| P of string
| Disjunction of Prop * Prop
| Conjunction of Prop * Prop
| Negation of Prop
Wo:
• A "p" representing the atom P,
• Disjunction(A "P", A "q") representing the proposition P ∨ q.
• Conjunction(A "P", A "q") representing the proposition P ∧ q.
• Negation(A "P") representing the proposition ¬P.
ich angeblich verwenden, um eine mengenbasierte Darstellung von Formeln in disjunctive normale Form. Da die Konjunktion kommutativ, assoziativ und (a ∧ a) äquivalent zu a ist, ist es zweckmäßig, ein Grundkonjunkt bc durch seinen Literalsatz litOf (bc) darzustellen.
bc ist definiert als: Ein Literal ist ein Atom oder die Negation eines Atoms und ein basisches conjunct eine Konjunktion von Literalen
Dies führt mich an die Funktion für litOf
: I
let litOf bc =
Set.fold (fun acc (Con(x, y)) -> Set.add (x, y) acc) Set.empty bc
bin ziemlich sicher, dass mein litOf
falsch ist, und ich bekomme einen Fehler auf dem (Con(x,y))
Teil sagen: "Unvollständiges Muster m atches auf diesem Ausdruck. Zum Beispiel kann der Wert 'Dis (_, _)' eine cas e nicht anzeigen von den Mustern bedeckt. ", was ich auch nicht weiß was bedeutet eigentlich in diesem Zusammenhang.
Irgendwelche Hinweise, wie ich fortfahren kann?
nicht sicher, ob ich verstehe alles hier, aber Spaß acc (Con (x, y erhalten)) ist wahrscheinlich ein Spielausdruck, wie ich es gelesen habe, und als solche vermisst du den Rest des "Matching" (von den Gewerkschaften). Es würde natürlich sehr helfen om der Code war hier in einem "laufenden" Zustand: [MCVE] http://stackoverflow.com/help/mcve –
Ein Beispiel für funktionierende und getestete Code zum Erstellen von DNF in F # kann sein gefunden [hier] (https://github.com/jack-pappas/fsharp-logic-examples/blob/master/FSharpx.Books.AutomatedReasoning/prop.fs#L407). Dies hat viel mehr Details, als Sie fragen, dauert Tage, um alles zu verstehen, da es auch Parsing und hübsches Drucken beinhaltet. Auch sollten Sie das Buch bekommen, um es wirklich zu verstehen. Daher ist es ein Kommentar. Es gibt [Beispiele] (https://github.com/jack-pappas/fsharp-logic-examples/blob/master/Examples/prop.fsx) für die Verwendung mit einer REPL –