L2.util
1from collections.abc import Callable, Sequence 2 3from .syntax import ( 4 Identifier, 5 Immediate, 6 Reference, 7 Term, 8) 9 10type Context = dict[Identifier, Term] 11 12 13def recur_terms( 14 terms: Sequence[Term], 15 recur: Callable[[Term], Term], 16) -> list[Term]: 17 return [recur(term) for term in terms] 18 19 20def extend_context_with_bindings( 21 bindings: Sequence[tuple[Identifier, Term]], 22 context: Context, 23 recur: Callable[[Term], Term], 24) -> tuple[list[tuple[Identifier, Term]], Context]: 25 new_bindings: list[tuple[Identifier, Term]] = [] 26 new_context = dict(context) 27 for name, value in bindings: 28 result = recur(value) 29 new_bindings.append((name, result)) 30 if isinstance(result, Immediate | Reference): 31 new_context[name] = result 32 return new_bindings, new_context
type Context =
dict[Identifier, Term]
def
recur_terms(terms: Sequence[Term], recur: Callable[[Term], Term]) -> list[Term]:
def
extend_context_with_bindings( bindings: Sequence[tuple[Identifier, Term]], context: Context, recur: Callable[[Term], Term]) -> tuple[list[tuple[Identifier, Term]], Context]:
21def extend_context_with_bindings( 22 bindings: Sequence[tuple[Identifier, Term]], 23 context: Context, 24 recur: Callable[[Term], Term], 25) -> tuple[list[tuple[Identifier, Term]], Context]: 26 new_bindings: list[tuple[Identifier, Term]] = [] 27 new_context = dict(context) 28 for name, value in bindings: 29 result = recur(value) 30 new_bindings.append((name, result)) 31 if isinstance(result, Immediate | Reference): 32 new_context[name] = result 33 return new_bindings, new_context