Also Forth hat viel mit einer Liste zu tun, nämlich einem Stack.
Was bedeutet das?
5 8 3 + a !
Das wäre etwa in Python, dabei hatte ich die Variable unterschlagen:
Code: Alles auswählen
a = variable()
lit(5)
lit(3)
lit(8)
mul()
add()
lit(a)
store()
Wobei wir zuvor definiert hatten:
Code: Alles auswählen
stack = []
class variable:
value = None
def set(self,value):
self.value = value
def get(self):
return self.value
def lit(value):
stack.append(value)
def add():
stack[-1] = stack[-2] + stack.pop()
def mul():
stack[-1] = stack[-2] * stack.pop()
def store():
variable = stack.pop()
variable.set(stack.pop())
Wenn wir dann die Variable ausgeben wollen, schreiben wir:
a @ .
Das ist dann in Python:
Wobei wir dann noch definiert haben:
Code: Alles auswählen
def get():
stack[-1] = stack[-1].get()
def output():
print(stack.pop())
Wer sich also in FORTH auskennt, kennt sich auch mit Listen aus.
Interessant wären da noch solche FORTH Befehle, wie
DUP, SWAP, OVER, ROT, PICK
Vielleicht mal versuchen, diese zu implementieren.
PS: es ist überhaupt kein Problem FORTH nach Python zu übersetzen. Braucht man natürlich nicht, weil es glücklicherweise dort compile und exec bzw. eval gibt
ich will jetzt nicht auf die Definition von FORTH Funktionen in Python eingehen, aber eine Funktion, die ein Quadrat berechnet, ist auch ganz einfach:
: quadrat DUP * ;
Wobei dann DUP ist:
Wenn Du jetzt noch SWAP, OVER, ROT und PICK probierst, hast Du es vielleicht kapiert.