FP

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°ΜΠ»ΡŒΠ½ΠΎΠ΅ программи́рованиС β€” Ρ€Π°Π·Π΄Π΅Π» дискрСтной ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ ΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ процСсс вычислСния трактуСтся ΠΊΠ°ΠΊ вычислСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² матСматичСском ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ послСдних (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ).

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ программирования, которая описываСт процСсс вычислСний ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояний (Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΌΡƒ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ²). ΠŸΡ€ΠΈ нСобходимости, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ вся ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… состояний Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса прСдставляСтся явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ список.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вычислСниСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ явного хранСния состояния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. БоотвСтствСнно, Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ ΠΎΠ½ΠΎ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ этого состояния (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ являСтся пСрСмСнная, хранящая своё Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°).

HOF - High ordered function

In mathematics and computer science, a higher-order function is a function that does at least one of the following:

const hof = (a) => (b) => a + b;
const repeat = (n, action) => {
  for (let i = 0; i < n; i++) {
    action(i);
  }
}

repeat(3, console.log);

Partial application (ЧастичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅)

Is a technique of fixing a number of arguments to a function, producing another function of smaller arguments i.e binding values to one or more of those arguments as the chain of function progressed.

JavaScript has the built-in method .bindthat works on functions with any number of arguments and can bind an arbitrary amount of parameters. Its invocation has the following syntax.

function.bind(context, [arg1], [arg2], ...)

It turns function into a new function whose implicit this parameter is this value and whose initial arguments are always as given.

function addition(x, y) {
   return x + y;
}

const plus5 = addition.bind(null, 5)

plus5(10) // output -> 15
//es6 pure partial
const partial = (fn, ...args) => (...rest) => fn(...args, ...rest) 

Composition

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΜΡ†ΠΈΡ фу́нкций (ΠΈΠ»ΠΈ супСрпози́ция фу́нкций) β€” это ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

const compose = (f1, f2) => value => f1( f2(value))
const number = compose(Math.round, parseFloat);

number('72.5') // 73

Curry

A curried function is a function that takes multiple arguments one at a time.

Curried functions on the other hand always return a unary function: a function which takes one argument.

All curried functions return partial applications, but not all partial applications are the result of curried functions.

The unary requirement for curried functions is an important feature.

// add = a => b => Number
const add = a => b => a + b;

const result = add(2)(3); // => 5

Clear functions

Memoize

Clojure

https://www.youtube.com/watch?v=BT7KnY6a_24

Last updated

Was this helpful?