Рубрики
Без рубрики

Создание структуры данных только с функциями

Простое, но далеко достижение следствия возможности гнездо к функциям в том, что d … помечены python, fp, datstructures.

Простое, но далеко достижение следствия возможности гнездо в функциях гнезда заключается в том, что данные могут храниться в прилагаемом объеме – или закрытии – внутренней функции. Рассмотрим следующую функцию:

def make_node(value, next_node):
    return lambda func: func(value, next_node)

Когда make_node называется двумя аргументами, они прикреплены к закрытию возвращенной функции. Впоследствии мы можем получить доступ к двум аргументам через

def value(node):
    return node(lambda value, next_node: value)

а также

def next_node(node):
    return node(lambda value, next_node: next_node)

Например,

>>> node = make_node("head", "tail")
>>> value(node)
'head'
>>> next_node(node)
'tail'

С этими функциями в руке легко реализовать стек в виде связанного списка. Мы определяем обычные операции стека

def push(value, stack):
    return make_node(value, stack)

а также

def pop(stack):
    return value(stack), next_node(stack)

Поведение, как и ожидалось:

>>> stack = None
>>> stack = push(1, stack)
>>> stack = push(2, stack)
>>> stack = push(3, stack)
>>> val, stack = pop(stack)
>>> val
3
>>> val, stack = pop(stack)
>>> val
2
>>> val, stack = pop(stack)
>>> val
1

Примечательно, что этот стек не использует встроенный встроенную структуру данных, такую как массив, а также не создает связанный список путем создания объектов узла. Скорее, существует цепочка функций, в которой закрытие каждой функции содержит значение и ссылку на следующую функцию.

Эта дискуссия была вдохновлена классическим Структура и интерпретация компьютерных программ . В частности, раздел 2.1 вводит понятие использования закрытий для создания структур данных.

Оригинал: “https://dev.to/scotchka/building-a-data-structure-with-nothing-but-functions-1i2p”