Функция в математике?
=======================

 Заинтересовался функциональным программированием, но т.к. в математике я не очень, тут же появились вопросы. Вот, например, не могу понять определение функции в математике. Википедию читал, но опять же больше вопросов, чем ответов. Объясните чайнику) 

> Вот у вашего учителя в классе есть журнал с фамилиями учеников и допустим, у вас в классе нет однофамильцев и родных братьев и сестер. А еще есть сами ученики, и предположим, что они все сегодня пришли в школу - никто не болеет и не прогуливает.  
> 
> Понятно, что есть очень четкое соответсвие между фамилиями в журнале у учителя и живыми учениками. Каждой фамилии соответсвует какой-то конкретный ученик. Так вот это соответсвие между строчками в журнале и настоящими учениками является примером функции.  
>   
> 
> Если более строго, то если есть два множества (в нашем примере это множество строчек с фамилиями в журнале и множество живых учеников) то между этими множествами можно придумать какое-то соответсвие, когда каждому элементу из одного множества ставится в соответсвие какой-то элемент из другого, например, каждой фамилии - ученик. Вот такое соответсвие и называется функцией.  
>   
> 
> Есть только одна тонкость. В математике функцией называют не любое такое соответсвие, а только такое при котором каждому элементу из первого множества соотвествует только один элемент из другого.  
>   
> 
> Например, если в классе два Иванова, а учитель когда писал список учеников в журнале одного Иванова пропустил, то получается в журнале Иванов один, но каждый живой Иванов будет считать, что это именно он. То есть одной строчке придется поставить в соответсвие двух учеников, тогда такое соответсвие не будет функцией. Нужно обязательно, чтобы для каждого Иванова была своя строчка в журнале, допустим с одинаковой фамилией, но разными именами.  
>   
> 
> В математике, конечно, редко занимаются множествами учеников или фамилий, обычно это два одинаковых множества чисел, например, одно это числа на оси х, другое это числа на оси у.  
> 
> Но суть та же. Каждому числу из одного множества ставят в соотвествие какое-то (но обязательно только одно! ) число из другого. Это соответсвие и называется функцией. Если это соответсвие представляет собой какое-то простое правило, то его удается записать в виде формулы: y = 5*x или y = sin(x) или еще как-нибудь, но это не обязательно, бывают функции которые нельзя записать формулой, например, есть функция которая каждому рациональныму числу ставит в соответсвие 1, а каждому иррациональному 0. Записать формулой эту функцию нельзя.  
>   
> 
> В общем, функция, это какое-то правило которое каждому элементу из одного множества ставит в соответсвие один элемент из другого множества.  
>   
> 
> На практике, что касается школьной математики, это график или формула которая, для каждого аргумента (обычно, обозначается х) , позволяет найти значение функции (обычно обозначается у или f(x)).  
> 
> Например, формула y = 3*x + 5 означает, что нам дана функция (то есть соответсвие) , которая каждому числу х ставит в соответсвие другое число 3х + 5.  
> 
> Одному соответсвует 3*1+5 = 6,  
> 
> двум - 3*2 + 5 = 11  
> 
> пяти - 20 и т. д.  
>   
> 
> И еще один нюанс напоследок, если уж дочитали до этого момента, то думаю сможете и его осилить.  
> 
> Вернемся к фамилиям и ученикам. К тому случаю когда одной фамилии Иванов соответсвует два ученика Иванова. Я тогда написал, что соответвие фамилия -----> ученик не функция, т. к. одной фамилии соответствует два человека. Но вот это соответсвие в обратную сторону то есть когда ученикам ставят в соответсвие фамилию: ученик ------> фамилия, будет функцией.  
>   
> 
> Каждому аргументу должно соотвествовать только одно значение, но разные аргументы могут принимать одинаковое значение (разные ученики принимают одинаковое значение - их фамилия) .  
> 
> Поэтому y = x^2 - функция, хоть х = 2 соответсвует у = 4, и х = (-2) соответсвует 4.  
> 
> А вот когда изучают корень из х, то строят функцию только из положительных значений то есть корень из 4 считают равным только 2, а (-2) не рассматривают, так как иначе такое соответсвие не было бы функцией и четырем соответсовало бы два значения.

  
  

<https://otvet.mail.ru/question/23478783> 

 функция суть отображение множества A в множество B такое, что для любого элемента из А существует, притом единственный, элемент множества В, который соответствует данному значению. 

 y = x - вот вам функция зависящая от x  
  

y = t - вот вам функция зависящая от t (времени)  
  

y = sin(t) - вот вам синусоидальная функция зависащая от времени... ну вы поняли  
  

Суть в том что результат работы функции зависит от аргументов. 

 Функция это **закон** который устанавливает зависимость одного элемента(зависимого) от другого(независимого). Когда независимый элемент принимает какое-то значение, зависимый от него элемент принимает только одно единственно верное значение в соответствии с этим законом. Взять например такую зависимость  *y = x * x*, если *х* примет значение 2, *y* будет равняться всегда только 4, а при *x* = 3, *y* = 9. То есть *y* полностью напрямую зависит от *х* и такая зависимость называется **функциональная**. А закон который устанавливает эту зависимость(в примере это *х * х*) называется **функцией**. 

> Заинтересовался функциональным программированием, но т.к. в математике я не очень, тут же появились вопросы. 

  
  

А я так думаю, что если вы не сильно дружите с математикой, то вам не стоит углубляться в функциональное программирование. Просто по той причине, что **все** языки функционального программирования (Lisp, Scheme, Ocaml, Haskell, Scala, ...), а щё хуже - их **документация** - строятся и пишутся на базе достаточно обстоятельного математического аппарата.  
  

А свет на функциональном программировании клином не сошёлся. Это только одна из нескольких парадигм. И ещё неизвестно какая лучше...  
  

P.S. Кстати, можете посмотреть вот это: [Сравнительное обозрение языков программирования](http://mylinuxprog.blogspot.com/2014/10/blog-post.html) - может сразу и расхочется ... или наоборот. 

 Функция - это некий алгоритм, который берет данные (аргументы) и возвращает их в обработаном виде (результаты).  

Например:  

x = 1 + y, математическая запись f x(1+y)  
  

В данном случае y - это данные, которые функция берет, а x = это куда она их возвращает.  

В программировании данные не могут быть невнятные, они типизированы - то есть это должно быть число, строка, массив данных или еще что. Может быть и пустой тип данных, но это уже частности. 

 или вот еще F(x,y) =0, или 1, в случае ошибки :) 

 Если смотреть на вещи проще, то функция в программировании - это правила, по которым из чего-то одного получается что-то другое (причем это что-то другое всегда одинаковое для одного и того же).  
  

Например, правила по которым из одних правил получаются другие правила - это и есть пример функции в программировании в общем виде.