Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2018, 21:21   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
Вопрос Что же такое функциональное программирование, какие языки фунционального программирования, или почему википедия на русском врёт и дезинформирует программистов

Цитата:
Сообщение от Alex11223 Посмотреть сообщение

это процедурное, ФП это о другом.
https://ru.wikipedia.org/wiki/%D0%A4...BD%D0%B8%D0%B5.
Я уже содавал тему

что-то типа Википедия всё время даёт кривой перевод дающий вам не верные знания, русской википедией пользоваться вредно

Читайте тут

https://en.wikipedia.org/wiki/Functional_programming

For subroutine-oriented programming, see Procedural programming.
In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions or declarations[1] instead of statements. In functional code, the output value of a function depends only on the arguments that are passed to the function, so calling a function f twice with the same value for an argument x produces the same result f(x) each time; this is in contrast to procedures depending on a local or global state, which may produce different results at different times when called with the same arguments but a different program state. Eliminating side effects, i.e., changes in state that do not depend on the function inputs, can make it much easier to understand and predict the behavior of a program, which is one of the key motivations for the development of functional programming.

Functional programming has its origins in lambda calculus, a formal system developed in the 1930s to investigate computability, the Entscheidungsproblem, function definition, function application, and recursion. Many functional programming languages can be viewed as elaborations on the lambda calculus. Another well-known declarative programming paradigm, logic programming, is based on relations.[2]

In contrast, imperative programming changes state with commands in the source code, the simplest example being assignment. Imperative programming does have subroutine functions, but these are not functions in the mathematical sense. They can have side effects that may change the value of program state. Functions without return values therefore make sense. Because of this, they lack referential transparency, i.e., the same language expression can result in different values at different times depending on the state of the executing program

А в российкой википедии функциональным программированием, походу назвали логическое, типа прологов.

Не читайте российских газет и российскую википедию тоже не читайте.

Там даже пример есть фунционального программирования, например, PHP, Python

PHP
Код:

Printing first 10 Fibonacci numbers, using function

function fib(int $n) : int {
    return ($n === 0 || $n === 1) ? $n : fib($n - 1) + fib($n - 2);
}

for ($i = 0; $i <= 10; $i++) echo fib($i) . PHP_EOL;

Python
Код:
Printing first 10 Fibonacci numbers, iterative

def fibonacci(n, first=0, second=1):
    for _ in range(n):
        print(first) # side-effect
        first, second = second, first + second # assignment
fibonacci(10)
А вот что пишет российская википедия про языки функционального программирования.
https://ru.wikipedia.org/wiki/%D0%A4...BD%D0%B8%D0%B5

Цитата:
Наиболее известными языками функционального программирования являются[2]:

Лисп — (Джон Маккарти, 1958) и множество его диалектов, наиболее современные из которых:
Scheme
Clojure
Common Lisp
Erlang — (Joe Armstrong, 1986) функциональный язык с поддержкой процессов.
Elixir
APL — предшественник современных научных вычислительных сред, таких как MATLAB.
ML (Робин Милнер, 1979, из ныне используемых диалектов известны Standard ML и Objective CAML).
F# — функциональный язык семейства ML для платформы .NET
Scala
Miranda (Дэвид Тёрнер, 1985, который впоследствии дал развитие языку Haskell).
Nemerle — гибридный функционально/императивный язык.
XSLT[3][4] и XQuery
Haskell — чистый функциональный. Назван в честь Хаскелла Карри.
А английская

Цитата:
3.3 Coding styles

3.3.1 PHP
3.3.2 Python
3.3.3 Haskell
3.3.4 Perl 6
3.3.5 Erlang
3.3.6 Elixir
3.3.7 Lisp
3.3.8 Clojure
3.3.9 Kotlin
3.3.10 JavaScript
3.3.11 SequenceL
3.3.12 Ruby
3.3.13 Tcl
3.3.14 Scala

никогда не читайте русскую википедию, тем более сейчас, когда есть гугл транслайт и можно перегнать через него всю страницу.
Alar вне форума Ответить с цитированием
Старый 25.07.2018, 23:08   #2
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,723
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
А в российкой википедии функциональным программированием, походу назвали логическое, типа прологов.
Где они там? В русской просто более древние языки и отсутствие обновлений. Ещё отвратительная лексика, а многое и есть гугл-перевод + вандализм.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 25.07.2018 в 23:27.
MihalNik вне форума Ответить с цитированием
Старый 26.07.2018, 00:27   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В функциональном стиле можно писать на разных языках, не только чисто функциональных типа Хаскеля.

Это в первую очередь неизменяемость состояния и т.п. как в математике.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.07.2018, 00:58   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
типа Хаскеля
Да я хаскель знать не знаю, если меня попросят привести пример, то самым известным для всех, не только для меня будет - PHP

Цитата:
В функциональном стиле можно писать на разных языках
Да естественно, что во всех языках функциональное программирование доступно, везде есть функции, но привыкаешь к нему именно в тех языках, в которых ничего кроме функций нету, которые вырабатывают стиль именно функциональный, тот же PHP. И уже открывая билдер не будешь делать программу или процедуру городить, а создашь функцию, и при наличии времени отгрузишь её в библиотеку, чтобы не потерять и больше никогда не копировать код, обращаться всегда к либам своим или чужим, к которым привык.

далее


Цитата:
Сообщение от Alar Посмотреть сообщение
это процедурное
Википедия на русском распространяет ошибочную информацию буквально везде.

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

и получаем следующую не корректную информацию

https://ru.wikipedia.org/wiki/%D0%A4...86%D0%B8%D1%8F

Цитата:
Функция (программирование) — вид подпрограммы в информатике.
Подпрограмма - это процедура, что очевидно. переходим по ссылке, чтобы почитать подробнее.

https://ru.wikipedia.org/wiki/%D0%A4...D0%B8%D0%B5%29

Цитата:
Фу́нкция в программировании — фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы. В большинстве случаев с функцией связывается идентификатор[en], но многие языки допускают и безымянные функции. С именем функции неразрывно связан адрес первой инструкции (оператора), входящей в функцию, которой передаётся управление при обращении к функции. После выполнения функции управление возвращается обратно в адрес возврата — точку программы, где данная функция была вызвана.

Функция может принимать параметры и должна возвращать некоторое значение, возможно пустое. Функции, которые возвращают пустое значение, часто называют процедурами. В некоторых языках программирования объявления функций и процедур имеют различный синтаксис, в частности, могут использоваться различные ключевые слова.
Цитата:
Функции, которые возвращают пустое значение, часто называют процедурами.
Что за?

Цитата:
часто
двойное что? в программирование не бывает двусмысленных значений вообще часто или нет, все так или иначе ноль или единица. не бывает часто, бывает тру и фалсе.

Дальше читать не стал, чтобы поберечь свои и ваши нервы.

Открываю английскую википедию, что вам советую делать всегда не оглядываясь на русскую.

https://en.wikipedia.org/wiki/Function

Цитата:
Function object, or functor or functionoid, a concept of object-oriented programming
Всё понятно и без перевода. Функция это функция, кто бы сомневался ))

https://en.wikipedia.org/wiki/Function_object

Цитата:
In computer programming, a function object[a] is a construct allowing an object to be invoked or called as if it were an ordinary function, usually with the same syntax (a function parameter that can also be a function). Function objects are often called functors.
гугл транслейт,

Цитата:
В компьютерном программировании объект функции [a] представляет собой конструкцию, позволяющую вызвать или вызвать объект, как если бы он был обычной функцией, обычно с тем же синтаксисом (параметр функции, который также может быть функцией). Функциональные объекты часто называют функторами.
хотя и без него все понятно, что повторили расширенно что функция это функция. как ещё функцию назвать, никак догадаться не могут, потому что не возможно функцию назвать иначе как функцией. и так все понятно функция - это функция. точка

Ну и дальше пример, который информативен и понятен даже при гугл переводе.

Цитата:
A typical use of a function object is in writing callback functions. A callback in procedural languages, such as C, may be performed by using function pointers.[2] However it can be difficult or awkward to pass a state into or out of the callback function. This restriction also inhibits more dynamic behavior of the function. A function object solves those problems since the function is really a façade for a full object, carrying its own state.

Many modern (and some older) languages, e.g. C++, Eiffel, Groovy, Lisp, Smalltalk, Perl, PHP, Python, Ruby, Scala, and many others, support first-class function objects and may even make significant use of them.[3] Functional programming languages additionally support closures, i.e. first-class functions that can 'close over' variables in their surrounding environment at creation time. During compilation, a transformation known as lambda lifting converts the closures into function objects.

не читайте гугл перевод на прямую, используйте как опору для чтения английского текста, где не понятны некоторые слова вам.
Цитата:
Типичное использование функционального объекта заключается в написании функций обратного вызова. Обратный вызов в процедурных языках, таких как C, может выполняться с помощью указателей функций. [2] Однако может быть сложно или неудобно передавать состояние в функцию обратного вызова или из нее. Это ограничение также препятствует более динамическому поведению функции. Функциональный объект решает эти проблемы, так как функция действительно является фасадом для полного объекта, несущего свое собственное состояние.

Многие современные (и некоторые более старые) языки, например. C ++, Eiffel, Groovy, Lisp, Smalltalk, Perl, PHP, Python, Ruby, Scala и многие другие, поддерживают первоклассные функциональные объекты и могут даже их использовать. [3] Функциональные языки программирования дополнительно поддерживают замыкания, то есть первоклассные функции, которые могут «закрывать» переменные в окружающей среде во время создания. Во время компиляции преобразование, известное как лямбда-подъем, преобразует замыкания в функциональные объекты.
Ну и далее пример сортировки, которая обычно идёт в первые месяцы обучения программированию.


Код:
#include <stdlib.h>

/* qsort() callback function, returns < 0 if a < b, > 0 if a > b, 0 if a == b */
int compareInts(const void* a, const void* b)
{
    return (*(int *)a > *(int *)b) - (*(int *)a < *(int *)b);
}
...
// prototype of qsort is
// void qsort(void *base, size_t nel, size_t width, int (*compar)(const void *, const void *));
...
int main(void)
{
    int items[] = { 4, 3, 1, 2 };
    qsort(items, sizeof(items) / sizeof(items[0]), sizeof(items[0]), compareInts);
    return 0;
}
Alar вне форума Ответить с цитированием
Старый 26.07.2018, 01:16   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Только одно наличие функций не принуждает к ФП.

В этом примере надо тогда хотя бы так:

Код:
int[] sortedItems = sort(items, ............., compareInts);
Цитата:
Сообщение от Alar Посмотреть сообщение
functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation
as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm, which means programming is done with expressions or declarations[1] instead of statements. In functional code, the output value of a function depends only on the arguments that are passed to the function, so calling a function f twice with the same value for an argument x produces the same result f(x) each time;
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.07.2018, 01:21   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Только одно наличие функций не принуждает к ФП.
тема не об этом, а о том что википедия врёт, и вводит в вас заблуждение.

функциональное программирование и процедурное это не одно и тоже

подпрограмма - это процедура.

функция - это функция.

подпрограмма - это не функция.

функция - это не подпрограмма.

В российской википедии вообще пытаются писать про матан и чёрте что, хотя в голове всплывает в качестве примера сортировка пузырьком на паскале ))

вот вам на дагдаггоуил.

Код:


function BubbleSort( list: TStringList ): TStringList;
var
  i, j: Integer;
  temp: string;
begin
  // bubble sort
  for i := 0 to list.Count - 1 do begin
    for j := 0 to ( list.Count - 1 ) - i do begin
      // Condition to handle i=0 & j = 9. j+1 tries to access x[10] which
      // is not there in zero based array
      if ( j + 1 = list.Count ) then
        continue;
      if ( list.Strings[j] > list.Strings[j+1] ) then begin
        temp              := list.Strings[j];
        list.Strings[j]   := list.Strings[j+1];
        list.Strings[j+1] := temp;
      end; // endif
    end; // endwhile
  end; // endwhile
  Result := list;
end;
Но в рунете любят примеры с процедурами, они на самом деле проще именно так пишешь на старте обучения.

сортируется массив A размером N чисел.

Код:
procedure SORT{obmen ili puzerka};
var i,j,c:integer;
begin
for i:=1 to n-1 do
 for j:=1 to n-i do
 if a[j]>a[j+1] then
                  begin
                  c:=a[j];
                  a[j]:=a[j+1];
                  a[j+1]:=c;
                  end;
end;
http://pblog.ru/lab/?p=58 - наш старый справочник, сборник кодов с форума.
Alar вне форума Ответить с цитированием
Старый 26.07.2018, 02:24   #7
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,723
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
В российской википедии вообще пытаются писать про матан и чёрте что
В российском матане написано чёрте как.

Цитата:
Сообщение от Alar Посмотреть сообщение
функция - это не подпрограмма.
В каждом отдельно взятом ЯП - своё собственное понятие функции.

Цитата:
Сообщение от Alar Посмотреть сообщение
в программирование не бывает двусмысленных значений вообще часто или нет
Речь про частоту разных определений в разных ЯП.
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 26.07.2018, 02:41   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от MihalNik Посмотреть сообщение
В каждом отдельно взятом ЯП - своё собственное понятие функции.
Это как такое может быть? функции везде функции.
Передал параметры, получил результ. всё, дальше делай с ним что хочешь.


Цитата:
Сообщение от MihalNik Посмотреть сообщение
Речь про частоту разных определений в разных ЯП.
Я не планирую ничего додумывать за тем кто изначально пишет бред.
И вам не советую.
Alar вне форума Ответить с цитированием
Старый 26.07.2018, 08:24   #9
Vladimir.1982
Форумчанин
 
Регистрация: 30.04.2018
Сообщений: 171
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Там даже пример есть фунционального программирования, например, PHP, Python
Haskell в моде.

Последний раз редактировалось Vladimir.1982; 26.07.2018 в 08:28.
Vladimir.1982 вне форума Ответить с цитированием
Старый 26.07.2018, 08:55   #10
Vladimir.1982
Форумчанин
 
Регистрация: 30.04.2018
Сообщений: 171
По умолчанию

Текст русскоязычной Википедии иногда не совпадает с английской.
Vladimir.1982 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое бизнес процессы и зачем они нужны, технологический процесс как более общее понятие. или перевод википедии на русском врёт. Alar Свободное общение 22 24.09.2017 00:02
Какие языки программирование нужны чтоб создать такой сайт nasha-shkola2.ru ja-va Свободное общение 3 19.09.2009 14:36
какие языки программирования и базы использовать? кто выпил мое пиво Помощь студентам 1 24.01.2009 13:45
Какие языки программирования вы изучали? LAN Свободное общение 3 10.11.2007 11:18