Initial commit - fix problems & refactor code

This commit is contained in:
2025-12-22 19:10:46 +03:00
commit ff36917cb5
39 changed files with 1499 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
from typing import Any
from core.primitives.list import cons, car, cdr, isList
from core.primitives.symbol import isSymbol, symbolName
from core.tokens import BaseToken, Lambda, Dambda, Macro, SpecialForm
from core.primitives.list import NIL
def Representation(obj: Any) -> str:
"""Return a showable string representation of an object in Lisp notation.
Args:
obj: The object to represent.
Returns:
A string that could be parsed back by the Lisp parser.
"""
if obj is None:
obj = NIL
if isList(obj):
result_str: str = ""
is_first: bool = True
current_item: Any = obj
while current_item != NIL:
if is_first:
is_first = False
else:
result_str += " "
result_str += Representation(car(current_item))
current_item = cdr(current_item)
return f"({result_str})"
elif isSymbol(obj):
return symbolName(obj) # type: ignore
elif isinstance(obj, str):
return f'"{obj}"'
elif isinstance(obj, BaseToken):
return obj.value
elif isinstance(obj, bool):
return "true" if obj else "false"
elif isinstance(obj, Lambda):
return f"({Representation(SpecialForm.LAMBDA)} {Representation(obj.args)} {Representation(obj.body)})"
elif isinstance(obj, Dambda):
return f"({Representation(SpecialForm.DAMBDA)} {Representation(obj.args)} {Representation(obj.body)})"
elif isinstance(obj, Macro):
return f"({Representation(SpecialForm.MACRO)} {Representation(obj.args)} {Representation(obj.body)})"
return str(obj)