Pull to refresh

Интересная задачка для интервью, карринг и частичное применение функции

Reading time3 min
Views80K
Хожу по job interview. Где-то скучно, где-то весело. Где-то интересно. На одном из таких меня попросили написать функцию, которая умеет складывать два числа. Я написал:

  it ('should add two numbers', function () {
    var add = function (a,b) {
      return a + b;
    };

    assert.equal(add(2,3), 5);
  });


А если, говорят, сигнатура функции должна быть типа такой: add(num1)(num2)? Не вопрос, говорю. Думая, что хитрый буржуин хочет проверить, знаю ли я про то, что можно возвращать функции из функций, пишу вот такое:

  it ('should be called like add(num1)(num2)', function () {
    var add = function (a) {
      return function (b) {
        return a + b;
      };
    };

    assert.equal(add(2)(3), 5);
  });


Читать дальше →
Total votes 168: ↑163 and ↓5+158
Comments74

Практика функционального программирования на JavaScript с использованием Ramda

Reading time3 min
Views21K
Мы в rangle.io давно увлекаемся функциональным программированием, и уже опробовали Underscore и Lodash. Но недавно мы наткнулись на библиотеку Ramda, которая на первый взгляд похожа на Underscore, но отличается в небольшой, но важной области. Ramda предлагает примерно тот же набор методов, что и Underscore, но так организовывает работу с ними, что функциональная композиция становится легче.

Разница между Ramda и Underscore – в двух ключевых местах – каррирование и композиция.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments34

Некоторые приемы функционального программирования в Python

Reading time2 min
Views6.3K

Привет, Хабр!
В этой статье я хотел бы рассказать о том, что пришло в Python из функциональных языков программирования. Заинтересовавшихся прошу под кат.

Читать дальше →
Total votes 15: ↑6 and ↓9-3
Comments13

JavaScript для чайников. Всё что вы хотели знать о функциях но боялись спросить

Reading time4 min
Views22K
Как-то незаметно для себя, я решил отойти от возни с классами и паттернами, и разобраться с самыми обычными Js функциями. Думал, что будет достаточно скучно, но ошибся — оказалось очень даже интересно.

В этой статье я расскажу об особенностях объявления функций, и некоторых полезных паттернах (кхе-хе, да, они есть и тут)

Читать дальше →
Total votes 106: ↑99 and ↓7+92
Comments43

Еще раз о каррировании и частичном применении в PHP

Reading time4 min
Views6.2K
Искусство каррированияВ недавней статье предложена реализация каррирования (currying) и частичного применения (partial function application) на PHP. Ее фундаментальным недостатком является то, что результатом каррирования является не функция, а объект. Он уже не может быть передан в качестве callback-параметра, а для подстановки аргументов приходится использовать специальный синтаксис. В настоящем тексте предлагается новая, прозрачная реализация этих конструкций для PHP 5.3 и выше.

Термин currying происходит от фамилии американского математика Haskell Curry. Второе значение слова currying — выделка дубленой кожи.

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

Эмуляция каррирования и частичного применения на PHP — это один из примеров того, что Макконнелл в «Совершенном коде» (гл. 4.3) называет программированием с использованием языка, а не на языке.
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments20

Частичное применение и каррирование в C++

Reading time12 min
Views16K
Приветствую.

Уж не знаю, как так вышло, но игрался я на досуге с лямбда-выражениями в С++11 (о которых, к слову, я уже писал статью, снискавшую пару лет назад на удивление достаточно неплохую популярность), и под наркотическим воздействием впечатлением от языка Haskell начал разбираться с такими понятиями, как частичное применение и каррирование в контексте языка С++. И для начала, пожалуй, неплохо бы нам определиться с этими терминами.

Читать дальше →
Total votes 57: ↑54 and ↓3+51
Comments45