Повторюсь. Функциональное программирование оно может быть и православненько математичненко, но ебануто на голову ещё больше чем МЭК61131-3 и релейные диаграммы.
Тем, что во втором случае понятно сразу: берём массив из 20 элементов и возводим каждый из них в квадрат. А что касается первого - то это какое-то (ворона (сыр (кар(кар(кар())))))
Банальный проход функцией λx.x^2 (возведением в квадрат, короче) по списку a. Причём нас при этом совершенно не беспокоит ни выход за границы массива (список может быть хоть бесконечным), ни типы элементов списка (возведутся в квадрат числа любого типа), ни побочные эффекты -- в результате мы получаем новый список, состоящий из квадратов.
Для point-free достаточно для начала понимания «одинаковые параметры с двух сторон мы опускаем». То, что это у нас получается комбинирование комбинаторов и прочие извращения с приведением к point-free — это уже потом.
Лямбда же в том объеме, чтобы врубиться в «"\x -> x*x" это тоже самое, что "square x = x*x", только без "square"» — это всего-навсего концепция анонимной функции. Без всяких гвоздей вроде бета-редукции. :)
Бета-редукция -- это вообще основа основ, таблица умножения, так сказать. Те же Абельсон и Сассман её дают во второй же лекции вообще не называя её никак, под личиной "методов применения функций". ;)
no subject
ебанутее
?
no subject
no subject
no subject
no subject
Как говорит мой шеф, есть два типа компьютерщиков. Одни оперируют битами и байтами, вторые — всякими абстракциями.
Но во втором подноде нет ничего сложного. Вот как оно выглядит чуть в другом синтаксисе:
squareArray array = map (square) array
where square x = x*x
Ну или
squareArray array = map (\x -> x*x) array
А теперь бы делаем point-free, но это уже чуточку более сильное колдунство:
squareArray = map (\x -> x*x)
Ну и что тут сложного? ;)
Вообще-то то, что мы тут назвали array, это такой список. Или не список. А дерево. Или действительно массив. Но это в данном случае роли не играет.
no subject
no subject
Или ты хочешь холивор? Тогда я щаз сделаю поцт в другом месте, там и посмотрим. :)
no subject
no subject
no subject
no subject
no subject
Лямбда же в том объеме, чтобы врубиться в «"\x -> x*x" это тоже самое, что "square x = x*x", только без "square"» — это всего-навсего концепция анонимной функции. Без всяких гвоздей вроде бета-редукции. :)
no subject
no subject