LINUX.ORG.RU
ФорумTalks

Нормальные пацаны не пишут ФП

 ,


0

2

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

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

Вся эта хрень идет чиста от непонимания такой фигни: функция всегда чиста как котоффские яйца. Если она оперирует муттабельными данными, она от этого грязной не становиться. Смотрите псевдокодик:

a=1
f=fun(x)x
f(a) ---> выхлоп 1
a=2
f(a) ---> выхлоп 2

Казалось бы, типа императивщина, грязь, да пацаны? Не хрена подобного. Эта хрень - кажущаяся. Это происходит, чиста от того, что вычисления у нас здеся, типо, энергичные. Помните присказку: явное лучше неявного? Сказка впереди. Что же тут реально, семантически, происходит? f принимает аргумент a и возвращает тоже a. Что взял, то и отдал. a пришло, и оно же ушло. Че из себя представляет а - это нашу функцию нии*т. Тут кажется, чиста, шо она возвращает разную хрень, потому что прогер не видит, что она реально берет и что возвращает, он видит не сам символ, а его значение, чиста. Функция соответствует определению того, что при любом одинаковом входе, она ВСЕГДА возвращает чиста одинаковый результат — a.

То шо ФП хорошо анализируется конпелятором, ето нормальных пацанов не волнует. Тут речь о том, шоб фэпешники не держали пацанов и экспертов чисто за лохов.

Так что, пацаны, я сам врубился в тему, и вас предупреждаю, что это чиста развод.

Перемещено leave из development

Ответ на: комментарий от quasimoto

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

a = 1
f = a
(f)
-> 1
a = 2
(f)
-> 2
функция f вполне чистая - ведь она возвращает не число, а некоторое вычисления, возвращающее число - при этом вычисление это в обоих случаях одно и то же.

Соответственно хитрым движением руки мы только что превратили все функции в любой нечистом языке в 100%-чистые! И даже не надо вводить никаких изменений в язык!

anonymous
()

Честно, я бы запретил травмировать мозги юных студентов изучением языка Haskell. Боже, какую потом околесицу несут эти недоучки! В ответ приходится только улыбаться и срочно менять тему разговора. Всем срочно изучать Python, в крайних случаях можно прописать Java, а самым буйным можно давать уже С++. Я так считаю.

dave ★★★★★
()
Ответ на: комментарий от anonymous

Пацаны не поймут.

Разве что если только можно будет видеть что (f) _вычисляется_ в #<computation-blah-blah-blah>, каждый раз в одно и то же, с необходимостью магически запустить эту вещь — ну будет как сейчас в хаскеле с IO. Один фиг, чистая функция это, например, sin, но не time, натуральный рандом или какой-нибудь ввод (в форме в которой они вычисляются непосредственно в значения, а не терм IO).

quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

Разве что если только можно будет видеть что (f) _вычисляется_ в #<computation-blah-blah-blah>, каждый раз в одно и то же, с необходимостью магически запустить эту вещь

Но зачем, если можно сделать это неявно и избавить программиста от ручной работы?

anonymous
()
Ответ на: комментарий от quasimoto

Один фиг, чистая функция это, например, sin, но не time, натуральный рандом или какой-нибудь ввод (в форме в которой они вычисляются непосредственно в значения, а не терм IO).

Но в чем проблема им неявно вычиляться в терм ИО?

anonymous
()
Ответ на: комментарий от anonymous

Но зачем, если можно сделать это неявно и избавить программиста от ручной работы?

Какого программиста в случае какого языка от какой работы?

Но в чем проблема им неявно вычиляться в терм ИО?

Ну пусть вычисляются — будет частичная семантика в которой все функции «чистые» и вызовы вычисляются либо в чистые значения обычных типов, либо в спецификации IO, а если продолжить эту семантику до конца, до непосредственных значений, то можно будет увидеть, чем sin отличается от time.

import Control.Monad
import Data.Time.Clock

isPureM f test = liftM2 (==) (f test) (f test)

main = do
  print =<< isPureM (return . sin) 1.0
  print =<< isPureM (const getCurrentTime) ()
quasimoto ★★★★
()
Последнее исправление: quasimoto (всего исправлений: 1)
Ответ на: комментарий от Deleted

мурло ушастое.

вот и готов годный комментарий к данному нику.

emulek
()
Ответ на: комментарий от hvatitbanit

Хотя недолюбливаю буржуев, и есть за что, особенно их политиканов и СМИ (а где хорошо, где этот неизвестный рай на земле?), но мне импонирует в буржуях то, что они часто не столь агрессивны как наши, и обычно более корректны в высказываниях, хотя придурков везде полно. Но здесь я тоже стараюсь не отставать от своих, быть форматным, так сказать ;)

Поэтому слова про «русский аналог stack overflow» принимаю за шутку. Да и здесь средний возраст присутствующих много-много моложе, тогда как на том же stack overflow можно встретить очень много известных личностей, некоторые довольно крупного масштаба. А теперь сравни с преобладающими школярами :)

dave ★★★★★
()
Ответ на: комментарий от dave

принимаю за шутку

А это и была она ;)

что они часто не столь агрессивны как наши

Ага, тем более никаких там «сделай вдоль», «язабан».

hvatitbanit
()

Есть только два ФП, которые реально нужны.

1. «Почти ФП» (а чем, собственно, не ФП?:)) - JavaScript

2. Groovy (ибо для Sping Framework полезен)

Яйцеголовые поделия идут в топку.

Bioreactor ★★★★★
()

Хочешь много - учить Хаскель, хочешь кушать здесь и сейчас - учить придется еще и разные #

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.