Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
|
|
@ -0,0 +1,33 @@
|
|||
"""Parametric polymorphism. Requires Python >= 3.12."""
|
||||
|
||||
from typing import Callable
|
||||
from typing import Iterable
|
||||
|
||||
|
||||
class Tree[T]:
|
||||
def __init__(self, value: T):
|
||||
self.value = value
|
||||
self.left: Tree[T] | None = None
|
||||
self.right: Tree[T] | None = None
|
||||
|
||||
def map(self, func: Callable[[T], T]) -> Iterable[T]:
|
||||
yield func(self.value)
|
||||
if self.left is not None:
|
||||
yield from self.left.map(func)
|
||||
if self.right is not None:
|
||||
yield from self.right.map(func)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
tree = Tree(7)
|
||||
tree.left = Tree(42)
|
||||
tree.right = Tree(101)
|
||||
tree.right.left = Tree(1)
|
||||
|
||||
# Fails static type checking as "foo" is not an int.
|
||||
# tree.left.left = Tree[int]("foo")
|
||||
|
||||
# Fails static type checking as Tree[str] is not Tree[int]
|
||||
# tree.left.left = Tree("bar")
|
||||
|
||||
print(list(tree.map(lambda v: v + 1))) # [8, 43, 102, 2]
|
||||
Loading…
Add table
Add a link
Reference in a new issue