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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 23:59   #81
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Цитата:
И там и здесь функция есть подпрограмма
Нет больше сил печатать )
Цитата:
отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом и распараллеливать их без каких-либо дополнительных действий со стороны программиста
Цитата:
Хотя большинство компиляторов императивных языков программирования распознают чистые функции и удаляют общие подвыражения для вызовов чистых функций, они не могут делать это всегда для предварительно скомпилированных библиотек, которые, как правило, не предоставляют эту информацию. Некоторые компиляторы, такие как gcc, в целях оптимизации предоставляют программисту ключевые слова для обозначения чистых функций. Fortran 95 позволяет обозначать функции как «pure».
Цитата:
Суть от этого не меняется, назови это монадой, а добро не может существовать без зла.
Монада это тоже матан.
Kostia вне форума Ответить с цитированием
Старый 27.12.2013, 06:12   #82
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Нет больше сил печатать )
Потому что копипастите бездумно, книжек начитались, а своего понимания нету.
Цитата:
отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных.
Вы же сами писали, что на хаскеле можно писать чисто, таки на делфи можно не опираться на внутреннее состояние через переменные. Итак и да, чуть более чем дофига функциональных языков создают и используют и переменные и циклы. Пункт 2 - внутри компилированной программы функции в функциональном языке и функции в императивном языке отличают ни чем и являются подпрограммами. Поэтому Вы эту романтику бросьте. Аналогично и побочные эффекты чуть более чем все языки программирования имеющие ввод-вывод есть с побочными эффектами (это помимо создания переменных, что уже само по себе побочный эффект) и потому вводят специальные механизмы типа монад. Но их использование не делает язык чистым, такие дела.
Цитата:
А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных.
Очередной 3,14дешь. При выводе текста на экран 5-ть раз он будет смещаться вниз в консоли, то есть будем иметь изменение данных в видеопамяти. И если не играть с позицией курсора, то он будет смещаться независимо от входных данных функции. Его координаты будут смещаться не только в связи с работой функции, но и в зависимости от внутреннего состояния системы ввода-вывода.
Цитата:
Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом и распараллеливать их без каких-либо дополнительных действий со стороны программиста
Этим должны заниматься операционки, так как ресурсы принадлежат им, а не программам.
Цитата:
они не могут делать это всегда для предварительно скомпилированных библиотек, которые, как правило, не предоставляют эту информацию.
А функциональные языки длл перекомпилируют что ли? Опять фигню какую-то написали.
Цитата:
Мы уже видели, как можно использовать GHCi в качестве калькулятора. Разумеется, такой подход приемлем лишь для очень коротких вычислений. Для длинных вычислений, а также для написания программ на Haskell, нам нужно отслеживать промежуточные результаты.
Промежуточные результаты хранятся в переменных. Например, рассмотрим следующее вычисление:
ghci> 3.1416 * 5^2
78.53999999999999
Результат — площадь круга с радиусом 5. Это очень неудобно — каждый раз печатать или запоминать последовательность \pi \approx 3.1416. На самом деле, вся цель програмирования заключается в том, чтобы поручить машине бездумное повторение и механическое запоминание. Именно поэтому в Haskell определена переменная под названием pi, которая содержит в себе более дюжины цифр из записи числа pi:
ghci> pi
3.141592653589793
ghci> pi * 5^2
78.53981633974483
Другими словами, как переменная pi, так и её значение 3.141592653589793 одинаково успешно могут быть использованы в вычисленииях, они взаимозаменяемы.
Пример из викиучебника.
Так что не надо нам чистить уши относительно чистоты Хаскелла - он такой же как и Делфи
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 27.12.2013 в 06:30.
Utkin вне форума Ответить с цитированием
Старый 27.12.2013, 09:56   #83
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Цитата:
Промежуточные результаты хранятся в переменных
Нуну, еще в Хаскеле и классы есть. Только это совсем иное от привычных всем вещей.
Цитата:
Потому что копипастите бездумно, книжек начитались, а своего понимания нету.
Да, так и есть. Еще я просто долблю по кнопкам каждый день и получаю за это З/П )
Цитата:
Очередной 3,14дешь
Да, да. Я уже приводил пример со скриптовыми языками которые выполняются в своем собственном контексте, к ним цепляют внешние функции которые уже от самих эти языков никак не зависят.
Цитата:
Этим должны заниматься операционки, так как ресурсы принадлежат им, а не программам.
Еще ни одна операционка не кэшировала MySQL запросы, web страницы и т.д. Даже доступ к файла кэширует не ОСь, а драйвер ФС или железо.
Цитата:
А функциональные языки длл перекомпилируют что ли? Опять фигню какую-то написали.
Это вы ересь несете!
Никто ничего не перекомпилирует
Kostia вне форума Ответить с цитированием
Старый 27.12.2013, 09:56   #84
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цитата:
отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом и распараллеливать их без каких-либо дополнительных действий со стороны программиста
Это многа букаф.
Суть инкапсуляции не меняется - можно огородить блок от внешних изменений, можно изменения внешнего от блока.
Можно приплести в довесок еще кучу абстракций - ничего не изменится.
Это не зависит от способа кодирования - пост/префикс/инфикс- - все равно можно огородить пространство с любой стороны. Все вопросы к реализации компилятора/интерпретатора - расспараллелить можно любой код разрезом потока данных без участия программиста.

З.Ы. Более всего фанаты ФП напоминают фанатов ассемблера:D
Учите Пролог - он порвет Ваше представление об идеи функциональной зависимости симметрией ввода/вывода.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 27.12.2013 в 10:06.
MihalNik вне форума Ответить с цитированием
Старый 28.12.2013, 21:15   #85
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Нуну, еще в Хаскеле и классы есть. Только это совсем иное от привычных всем вещей.
Переменная = не чистый язык. Причем здесь классы?
Цитата:
Я уже приводил пример со скриптовыми языками которые выполняются в своем собственном контексте, к ним цепляют внешние функции которые уже от самих эти языков никак не зависят.
Хоть горшком обзови только в печь не ставь. Никакой принципиальной разницы между делфи и хаскеллом в вопросе чистоты.
Цитата:
Это вы ересь несете!
Это не ересь, а намек, на то, что нужно давать более развернутые и простые ответы, если хотите чтобы Вас понимали простые смертные.
Цитата:
Еще ни одна операционка не кэшировала MySQL запросы, web страницы и т.д. Даже доступ к файла кэширует не ОСь, а драйвер ФС или железо.
А файл подкачки откуда берется? От сырости заводится что ли?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 28.12.2013 в 21:21.
Utkin вне форума Ответить с цитированием
Старый 29.12.2013, 00:13   #86
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

просто оставлю это здесь : apl

Последний раз редактировалось Levsha100; 29.12.2013 в 00:19.
Levsha100 вне форума Ответить с цитированием
Старый 29.12.2013, 23:51   #87
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

А чем вам Brainfuck не нравится?
Altera вне форума Ответить с цитированием
Старый 30.12.2013, 11:17   #88
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Цитата:
А чем вам Brainfuck не нравится?
Забавный язык, как-то интерпретатор писал для него. )
Kostia вне форума Ответить с цитированием
Старый 24.01.2014, 21:21   #89
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,692
По умолчанию

Цитата:
Переменная = не чистый язык.
Да, именно так подсказывает Кэп ;p
Цитата:
Причем здесь классы?
В том что понятия в разных языках определяются по разному. Классы в Хаскеле это тоже самое что интерфейсы в императивных языках.
А что-то меняющееся для привычке людям перешедшим с императивных языков называют переменными, но на самом деле объекты в фп не меняются, их можно только создавать и нельзя разрушать. Например что-бы добавить элемент в конец списка, нужно целиком создать новый список. Именно поэтому в фп очень хорошо развит сборщик мусора и встроенные средства оптимизации, которым на руку мат. строгость и чистота языка.
Цитата:
Хоть горшком обзови только в печь не ставь. Никакой принципиальной разницы между делфи и хаскеллом в вопросе чистоты.
Цитата:
Переменная = не чистый язык.
Все просто.
Монады ≠ нечистота. Например списки это тоже монада. Functor тоже монада, например обобщение для map
Код:
class Functor f where
fmap                    :: (a -> b) -> f a -> f b
map (+1) [1,2,3,4] вернет [2,3,4,5]
fmap (+1) [1,2,3,4] тоже вернет [2,3,4,5]
Но если определит свой контейнер например Tree как воплощение Functor:
Код:
instance Functor Tree where
    fmap f (Leaf x)       = Leaf (f x)
    fmap f (Branch t1 t2) = Branch (fmap f t1) (fmap f t2)
соответственно теперь fmap применима к деревьям )

Относительно IO, так называемой "грязной" стороне языка. Существует связь между чистотой и ленивостью. Программа на функциональном языке представляет собой суперпозицию функций, т.е. на выходе получается функция. Аргументы у функции могут быть определены не сразу, вот так захотелось, хочу их ввести уже после получения части вычислений ) и в силу "всеобщей" ленивости языка это становится допустимым. Ведь какая разница, если мы заранее определимся с тем, какие данные передадим программе или будем их подавать порциями. Естественно если все данные засунуть в программу целиком, то и получим один и тот же результат да и если будем постоянно вводить(включая третью сторону, базы всякие, файлы ...) по мере необходимости те же данные, то тоже получим один и тот же результат. Вывод промежуточных результатов также не влияет на чистоту, меняется состояние внешней среды, но не внутри функции, если вся система вывода была построена на фп, то приходим к тем самым переменным, чтобы перерисовать форму, создаем новую на основе старой + изменения, а старая почистится сборщиком. При умной реализации всего этого, мы как программисты будем видеть создание нового объекта, а компилятор подсуетится, чтобы изменился уже существующий объект в памяти, если на него больше никто не ссылается(встроенные функции в Erlang например так делают)
Так что о "грязности" IO в ленивых языках еще можно поспорить.

Возможно вы опять воскликните, что если в программу на Делфи тоже засовывать одни и те же аргументы, то она тоже будет срабатывать одинаково. Это так, но
Цитата:
Переменная = не чистый язык.
со всеми вытекающими
Kostia вне форума Ответить с цитированием
Старый 24.01.2014, 23:00   #90
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

Если малое количество символов в языке можно назвать лаконичностью, то можно приписать и сравнительно новый Whitespace - всего два символа, если не считать перевода строки.
PathTheir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросик самым опытным :-) Doholyan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.08.2009 17:13
Проблема с синтаксисом? Geddar PHP 1 30.06.2008 16:44
Казус с синтаксисом???... Sota Общие вопросы C/C++ 6 17.07.2007 19:15