builtup4/bu4/linking/constructs/llambda.py

30 lines
853 B
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.evaluation.av.envtype import envtype
from bu4.evaluation.constructs.elambda import ELambda
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.linking.constructs.linked import Linked
__all__ = ('LLambda',)
class LLambda(Linked):
value: Linked
def __init__(self, name: bytes, value: Linked):
self.name = name
self.value = value
self.future = self.value.future - {name}
self.multifuture = self.future
self.used = name in value.future
def evaluable(self, env: envtype) -> Evaluable:
return ELambda(
{name: env[name] for name in self.future} if self.used else env,
self.name,
self.value
)
def __str__(self):
return f'({self.name.decode()}){self.value}'