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]:
14def recur_terms(
15    terms: Sequence[Term],
16    recur: Callable[[Term], Term],
17) -> list[Term]:
18    return [recur(term) for term in terms]
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