Введение : Позапрошлым летом я открыл для себя замечательную книгу.
SICP — Прочитав только первый раздел книги, я открыл для себя новый мир функционального программирования.
Анонимные функции, функции, возвращающие функции, функции высшего порядка.
Во втором разделе книги авторы показали, что с помощью одних только функций можно создавать различные структуры данных, например пару, список или даже деревья! Сегодня мне бы хотелось реализовать некоторые идеи из этой книги на языке программирования Python. Разумеется, исключительно с помощью функций.
Начинать : Python — замечательный язык программирования, поддерживающий практически все парадигмы программирования.
Python легко понять, и для прочтения этой статьи достаточно базовых знаний языка.
Также было бы неплохо взглянуть на это немного статья .
I. Создание пары.
Что такое пара? Пара — это упорядоченный набор, состоящий из двух элементов, предположительно разных типов.
Стоит отметить, что в Python кортеж (пара — частный случай кортежа) — это особый тип данных, который очень часто используется, и создается следующим образом: р = (а1,а2,.
,ан) .
Но поскольку мы договорились использовать только функции, нам придется создать собственную реализацию пары:
Ждать! Но make_pair возвращает функцию, а не пару.def make_pair(x,y): return lambda n: x if n==0 else y def first(p): return p(0) def second(p): return p(1)
По сути, пара в нашем представлении — это функция, которая принимает любое число в качестве входного аргумента и возвращает первый элемент, если аргумент равен 0, и второй — в противоположном случае.
Чтобы повысить уровень абстракции, мы также создали функции для доступа к элементам нашей пары: первый И второй .
Давайте убедимся, что наша реализация пары работает должным образом: p = make_pair(5,6)
first(p) #5
second(p) #6
p1 = make_pair('hello',6)
first(p1) #'hello'
II. Список Что такое список?
Список — это абстрактный тип данных, представляющий собой упорядоченный набор значений, в котором значение может встречаться более одного раза.Сейчас мы реализуем связанный список, одну из возможных реализаций списка.
Связанный список — это базовая динамическая структура данных в информатике, состоящая из узлов, каждый из которых содержит как сами данные, так и одну или две ссылки («ссылки») на следующий и/или предыдущий узел в списке.Фактически, связанный список можно рассматривать как пару, состоящую из двух значений: «головы» списка и его «хвоста».
Например, список [1,2,3,4] можно представить следующим образом: l = make_pair(1,make_pair(2,make_pair(3,4)))
first(l) #1
first(second(l)) #2
Теперь добавим поддержку пустых списков.
Пустой список — это список, который не содержит никаких элементов.
При обращении к своим элементам он должен каким-то образом сообщить об ошибке.
def nil():
def closure(n):
raise Exception
return closure
null = nil()
first(null) #Exception
second(null) #Exception
def create_list(x):
return make_pair(x,null)
К сожалению, функции первый И второй не являются интуитивно понятными функциями для доступа к элементам списка.
Гораздо чаще приходится работать с функциями голова И хвост def head(l):
Теги: #python #Алгоритмы #Функциональное программирование #Аномальное программирование #python #программирование
-
Броня Для Чайников И Разработчиков Игр
19 Oct, 24 -
Yota И Любой Современный Ноутбук
19 Oct, 24 -
Стоит Ли Идти На Собеседование К Рекрутеру?
19 Oct, 24 -
Осло — Труба
19 Oct, 24 -
Нацелена Ли Компания Soup На Victory S.a.?
19 Oct, 24