aus Spaß an der Freude wollte ich das MIU-System aus dem Buch Gödel, Escher, Bach programmieren. Das Erzeugen neuer Sätze konnte ich lösen (s.u.). Jetzt brauche ich eine Datenstruktur "Baum" und eine Möglichkeit diesen Baum auszugeben. Gibt es dafür ein geeignetes Modul?
Die Regeln für das MIU-System sind wie folgt:
Der erste Satz, von dem alle anderen abgeleitetet werden ist "MI". Es gibt vier Regeln nach denen ein Satz weiterentwickelt werden kann:
- Wenn ein Satz mit "I" endet, dann darf "U" angehängt werden.
- Aus Mx darf Mxx werden.
- "III" darf durch "U" ersetzt werden.
- "UU" darf gestrichen werden.
Das Erzeugen aller möglichen Sätze, die aus einem Satz erzeugt werden können habe ich wie folgt gelöst:
Code: Alles auswählen
def derive_terms(term):
terms = []
if term[-1]=="I":
terms.append (term + "U")
terms.append (term + term[1:])
for _ in range(len(term)):
try:
position = term.index("III",_)
derived_term = term[:position] + "U" + term[position+3:]
if not derived_term in terms:
terms.append (derived_term)
except ValueError:
continue
for _ in range(len(term)):
try:
position = term.index("UU",_)
derived_term = term[:position] + term[position+2:]
if not derived_term in terms:
terms.append (derived_term)
except ValueError:
continue
return terms