Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2009 11:06:01

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

Добрый день.

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

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

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

не понятно вот это: не может изменить вызывающее её окружение и запомнить результаты своей работы. Это что значит?
вот код на питоне

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

Спасибо.



Отредактировано (Фев. 4, 2009 11:08:43)

Офлайн

#2 Фев. 4, 2009 15:01:42

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

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)
Декомпозиция программы при ФП сводится к ее разбиению на отдельные функции, которые работают по принципу - есть вход (аргументы), есть выход (возвращаемое число). Глобальные (или просто более верхнего уровня) переменные внутри функции не используются, либо, по крайней мере, не модифицируются. На таком уровне и обеспечивается инкапсуляция частей кода программы.

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



Офлайн

#3 Фев. 5, 2009 09:22:56

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

Большое спасибо! Стало понятнее.

То есть окамл как бы тоже не чисто функциональный? И схема в гимпе (функции могут менять изображения (массивы пикселей)).



Офлайн

#4 Фев. 5, 2009 12:01:29

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

А меня мучает вопрос про ООП :)
Программерского образования не имею, и не понимаю, почему для знакомых студентов ООП, тоже самое, что “термех”, “сопромат”. Вроде ничего сложного нет, а ему удиляют много времени, и считается сложным курсом %)



Офлайн

#5 Фев. 5, 2009 12:41:51

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

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

Кстати по топику нашел вот что 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. По мойму это как-то … мысль по-человечески, что ли. Как нервы работают…



Отредактировано (Фев. 5, 2009 12:47:29)

Офлайн

#6 Фев. 5, 2009 14:27:43

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

ice
Просто, говорит, питон - язык очень простой, но сам принцип и законы ооп это не только питон :)
Ну это я понимаю… По мне, так все просто, и единожды хватило одного просветления разума, чтобы понять принципы ООП, и не понимаю, как это может быть сложным, как и с функциональным программирование.
P.S. До питона, знал только бейсик, сначала думал “как, блин реализовать сложный алгоритм, без GOTO, а сейчас думаю ”Как вообще можно было обходится без функций(классов)"



Офлайн

#7 Фев. 5, 2009 15:30:27

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

igor.kaist
и не понимаю, почему для знакомых студентов ООП, тоже самое, что “термех”, “сопромат”. Вроде ничего сложного нет,
Пітон дуже багато чого не підтримує в ооп (що саме не підтримує можу написати пізніше - коли знайду свій конспект лекцій з ооп), тому і ооп в ньому виглядає легке. пітон обєктно-орієнтований тільки тому що підтримуються тільки 3 основних принципи ооп (наслідування, поліморфізм, інкапсуляція) і то в спрощеному вигляді. Насправді ооп набагато ширше за тих 3 принципи. С++ і Object Pascal насправді підтримують ООП. Деяких речей які стосуються ооп пітон принципово не може підтримувати так як в нього динамічна типізація а деяких просто не підтримує. Не можна сказати що пітон підтримує ооп на такому ж рівні як той же с++.



Отредактировано (Фев. 5, 2009 15:32:02)

Офлайн

#8 Фев. 5, 2009 15:47:42

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

crchemist
Пожалуйста, пишите по-русски. Уважайте окружающих.



Отредактировано (Фев. 5, 2009 15:51:30)

Офлайн

#9 Фев. 5, 2009 16:14:12

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

Daevaorn
Пожалуйста, пишите по-русски. Уважайте окружающих.
Уявляю собі таблички: ~не матюкайтесь в школі~, ~не смітіть на вулиці~, ~не сцяйте в підїзді~, ~не говоріть українською~ і внизу кожної таблички - ~поважайте оточуючих~. Просто пипець. Вибачайте, не можу адакветно вам відповісти. ну дуже вже задовбали такі просьби.



Офлайн

#10 Фев. 5, 2009 16:30:38

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Про функциональные языки программирования

crchemist
Що конкретно не підтримує в ООП пітон? Можливо при його реалізації частина ооп фішок з того ж С++ просто не потрібна?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version