Subato

Resource Files

Aussagenlogische Formeln Auswerten

In dieser Aufgabe verwenden wir einige Preview Fetures aus Java 16.

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 instanceof 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{ //Inner classes for different forms of formulae. 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){ if (this instanceof Var v) return interpretation.get(v.n); //TODO add missing instanceof throw new RuntimeException("unhandled Logic class case: "+this); } }
java
You are not logged in and therefore you cannot submit a solution.