Subato

Resource Files

Aussagenlogische Formeln Auswerten

In dieser Aufgabe verwenden wir einige aus Java 16 und ein Preview Feature azs Java 17.

Gegeben sei ein Datentyp für aussagenlogische Formeln.

public sealed interface Logic
    permits Logic.Var, Logic.Neg, Logic.Implication, Logic.And, Logic.Or{
  static record Var(String n) implements Logic{}
  static record Neg(Logic f) implements Logic{}
  static record Implication(Logic l,Logic r) implements Logic{}
  static record And(Logic l,Logic r) implements Logic{}
  static record Or(Logic l,Logic r) implements Logic{}
}

Hier werden die neuen record-Klassen verwendet. Objekte von record-Klassen lassen sich nicht verändern. Sie haben einen Konstruktor, in dem auch die Felder der Klasse definert sind.

Die Methoden equals und toString sind inhaltlich überschrieben, können aber auch vom Programmierer überschrieben werden.

Zusätzlich ist die Schnittstelle versiegelt mit dem Schlüsselwort sealed und erlaubt nur eine feste Menge von Klassen, die sie implementieren, die in der permits Klausel angegeben sind.

Vervollständigen Sie die Methode, die für eine Interpretation, die jeder aussagenlogisch Variablen einen Wahrheitswert zuweist, den Wahrheitswert er Formel ausrechnet. Die Interpretation ist ein Objekt der Schnittstelle Map und bildet die Variablennamen auf Wahrheitswerte ab.

In der Methode empfiehlt es sich das Pattern Matching für switch zu verwenden.


package name.panitz.util; import java.util.Map; public sealed interface Logic permits Logic.Var, Logic.Neg, Logic.Implication, Logic.And, Logic.Or{ static record Var(String n) implements Logic{} static record Neg(Logic f) implements Logic{} static record Implication(Logic l,Logic r) implements Logic{} static record And(Logic l,Logic r) implements Logic{} static record Or(Logic l,Logic r) implements Logic{} default boolean evaluate(Map<String,Boolean> interpretation){ return switch(this){ case Var v -> interpretation.get(v.n); //TODO add missing cases }; } }
java
You are not logged in and therefore you cannot submit a solution.