Найти - Пользователи
Полная версия: Про функциональные языки программирования
Начало » Флейм » Про функциональные языки программирования
1 2 3
ice
Добрый день.

Уважаемые, объясните мне что это значит “функциональные языки программирования”. Только сильно не пинайте, если глупости спрашиваю :) В википедии прочитал следующее:

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

Функция в математике не может изменить вызывающее её окружение и запомнить результаты своей работы, а только предоставляет результат вычисления функции.

не понятно вот это: не может изменить вызывающее её окружение и запомнить результаты своей работы. Это что значит?
вот код на питоне
def f(a, b): 
return a+b
Это подходит под это понятие? если да, то питон тоже функциональный?
или вот почитал про окамл (код на нем):
let f a b =
a + b;;
Чем окамл отличается от питона, если все то же самое можно делать? В чем вообще отличие “языков” от “функциональных языков”?

Спасибо.
ZAN
ice
Функция в математике не может изменить вызывающее её окружение и запомнить результаты своей работы, а только предоставляет результат вычисления функции.
На примерах:
def get_sum(arg1, arg2):
return arg1 + arg2

a = 1
b = 2
print get_sum(a, b)
Здесь функция ничего не изменяет - только возвращает вычисленный результат.

А здесь - функция модифицирует список. С точки зрения функционального программирования - это не хорошо:
def append_arg(lst, arg):
lst.append(arg)

a = []
b = 3

append(a, b)
Или здесь:
def append_arg(arg):
a.append(arg)

a = []
append_arg(134)
Декомпозиция программы при ФП сводится к ее разбиению на отдельные функции, которые работают по принципу - есть вход (аргументы), есть выход (возвращаемое число). Глобальные (или просто более верхнего уровня) переменные внутри функции не используются, либо, по крайней мере, не модифицируются. На таком уровне и обеспечивается инкапсуляция частей кода программы.

В питоне можно писать, придерживаясь функциональной парадигмы. А можно и не писать.
Генераторы - пример, когда на основе функции реализуется конструкция, которая к функциональному программированию не имеет никакого отношения.
ice
Большое спасибо! Стало понятнее.

То есть окамл как бы тоже не чисто функциональный? И схема в гимпе (функции могут менять изображения (массивы пикселей)).
igor.kaist
А меня мучает вопрос про ООП :)
Программерского образования не имею, и не понимаю, почему для знакомых студентов ООП, тоже самое, что “термех”, “сопромат”. Вроде ничего сложного нет, а ему удиляют много времени, и считается сложным курсом %)
ice
У меня тоже нет такого образования, но вот тут приятель сидит в политехе учится, так говорит, что это довольно не простая вещь - ооп. Просто, говорит, питон - язык очень простой, но сам принцип и законы ооп это не только питон :) ну вот как-то так.

Кстати по топику нашел вот что http://ru.wikibooks.org/wiki/Основы_функционального_программирования

Многое непонятно, так как математику у нас тоже абы как вели, но так интересно…очень понравилось вот такое:

fibb (0) = 1
fibb (1) = 1
fibb (N) = fibb (N – 2) + fibb (N – 1)

или на окамле:

let map_list f lst = 
match lst with
[] -> []
| head::tail -> f (head) :: map_list f tail
;;
Pattern matching. По мойму это как-то … мысль по-человечески, что ли. Как нервы работают…
igor.kaist
ice
Просто, говорит, питон - язык очень простой, но сам принцип и законы ооп это не только питон :)
Ну это я понимаю… По мне, так все просто, и единожды хватило одного просветления разума, чтобы понять принципы ООП, и не понимаю, как это может быть сложным, как и с функциональным программирование.
P.S. До питона, знал только бейсик, сначала думал “как, блин реализовать сложный алгоритм, без GOTO, а сейчас думаю ”Как вообще можно было обходится без функций(классов)"
crchemist
igor.kaist
и не понимаю, почему для знакомых студентов ООП, тоже самое, что “термех”, “сопромат”. Вроде ничего сложного нет,
Пітон дуже багато чого не підтримує в ооп (що саме не підтримує можу написати пізніше - коли знайду свій конспект лекцій з ооп), тому і ооп в ньому виглядає легке. пітон обєктно-орієнтований тільки тому що підтримуються тільки 3 основних принципи ооп (наслідування, поліморфізм, інкапсуляція) і то в спрощеному вигляді. Насправді ооп набагато ширше за тих 3 принципи. С++ і Object Pascal насправді підтримують ООП. Деяких речей які стосуються ооп пітон принципово не може підтримувати так як в нього динамічна типізація а деяких просто не підтримує. Не можна сказати що пітон підтримує ооп на такому ж рівні як той же с++.
Александр Кошелев
crchemist
Пожалуйста, пишите по-русски. Уважайте окружающих.
crchemist
Daevaorn
Пожалуйста, пишите по-русски. Уважайте окружающих.
Уявляю собі таблички: ~не матюкайтесь в школі~, ~не смітіть на вулиці~, ~не сцяйте в підїзді~, ~не говоріть українською~ і внизу кожної таблички - ~поважайте оточуючих~. Просто пипець. Вибачайте, не можу адакветно вам відповісти. ну дуже вже задовбали такі просьби.
Ferroman
crchemist
Що конкретно не підтримує в ООП пітон? Можливо при його реалізації частина ооп фішок з того ж С++ просто не потрібна?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB