Функциональное программирование — то, что вам (наверно) рассказывали. Если вы слушали

« // , ». , : « ?» ( ), « , ?» ( ) « , , » ( ). : , , , . .

, , , .. . - , , , . , , . , — — . ( ) , , , , — , , — , .

?

, . … , , . , — . , , , , . , , .

, - . , - , . , . , . , , .

, , — , , , , , , , .

,


. // , - . , . : //, , . «» « », .

, . — . , , , . : ? , , . , , , . : « , ». . , , , . , , , , . .

, , , … . , . . , , , . . . , -.


- ? . , , , . . -. ( ) -, () . () , -, , () - (), , . : — — , , . , . : . — . — ( ) , . «» . «» «» «», . «» , , , , — , .

. , . , Haskell , n :

fibonacci2 a b = a : (fibonacci2 b (a+b))
fibonacci = fibonacci2 1 1

nfibonacci n = take n fibonacci

fibonacci2 , , fibonacci2 b (a+b). ( !) :
def fibonacci2(a, b) :
    return [a] + fibonacci2(b, a+b)

def fibonacci() :
    return fibonacci2(1, 1)

def nfibonacci(n) :
    res = []
    data = fibonacci()
    for i in range(n) :
      res.append( data[i] )
    return res

nfibonacci.

fibonacci ( ) . , nfibonacci (, , «»). «» , , n , nfibonacci n , fibonacci. : — , — , n- — . «» .

: " , ! , ". , , . , «» , «» . , , , C, .

. , . — , , « » , , , . , , . , , :

def fibonacci() :
    a = 1
    b = 1
    yield a
    yield b
    while True :
      c = a + b
      yield c
      a = b
      b = c
     
def nfibonacci(n) :
    return [e for e in itertools.islice(fibonacci(), n)]

fibonacci() — , . fibonacci - . , , . «». C++ , Fibonachi . , — .

, , , .


, — «» . — . . , , , . .

, , . , , , , . , , «» . , , «» , () . — , , , , .

,

def f(x,y) :
  ...


def g(x, y) :
  return f(y, x)

g(a, b) f(b, a) a b. f , , . , bf . «» , ( b f) . , , . . , «» () .

, «» , . . , . , . , «» .

,
— ,
, . , «» , «». , .

. - — , . . : «» ? — . — . , «» , . , , ( ), , , «» . , , . , .

? . , . , , , . , (, ) , , . . . , , , . , . , . , Maybe std::optional C++ , - .

?


— , - - . « »? , , . , ? , . , «». : - , . , — , . , «» , , , (), .

, . — « » , : — . , , « ». , , , — . , — . , .

map fold. — f(x, y). «» , . , x.

, f , , , y. , x — , g(y). f , f(x), g(y). , N>1 , , N-1 .

? , . - :

def partial(f, x) :
	def g(*args) :
		return f(x, *args)
	return g

partial, N , — , N-1 . , N-1 . , . ? , . , partial , . , g — . ? x ( g). g, x f. , — .

, . , . . , . . , . , , . . ? , , , . , , « », ( , ) . .

?


. :

  • , , , , . . — .
  • , , . . , «» «» . , . .
  • , , , . . — .
  • , . , «» ; , . , - , - . .
  • , . , . , , , . .

— , () . -, , , - . . , ; , . , , , , . , , , . , — , - . , , , , , . PsyHaSTe.

. .

All Articles