LINUX.ORG.RU

Концептуальная дыра ФП.

 , , ,


1

2

«Изменяясь, оно остается неподвижным»

Гераклит.

На протяжении нескольких месяцев уже я пытаюсь понять ФП. И пока у меня 2 варианта. Либо я идиот, либо ФП имеет огромную концептуальную трещину в самом основании.

Древние говорили, что нельзя дважды войти в одну и ту же реку. Это значит, что река - это всегда река. Река постоянно меняется, но она остается все той же рекой, и о ней можно говорить как о реке. Что мы имеем в ФП:

(define river-state 1)
(define fu (let ((the-river-state river-state)) (lambda() the-river-state)))
(write (fu))
(define river-state 2)
(write (fu))
(define river-state 3)
(write (fu))
;111
Благодаря лексической области, мы не можем рассуждать о реке как просто о реке, мы (и вызывающий код) вынуждены говорить только о той реке, которая была и которая зафиксирована. У нас здесь вообще нет реки в обычном понимании. Здесь нет абстракции.

Дело тут даже не во времени. Мы вообще лишены возможности рассуждать о вещах в общем смысле. ФП снижает абстракцию. Абстргирование стремиться к нулю. Только ради компиляции мы вынуждены мириться с тем, что наш язык не дает нам возможности расуждать о вещах наиболее естественным путем.

PS Как выяснилось, многие не поняли о чем я говорю. Я говорю здесь о фиксации состояния внутри ф-ции. То что код примера императивен я в курсе, это было сделано преднамеренно, для демонстрации идеи. Не надо капитанствовать по этому поводу.



Последнее исправление: anonimous (всего исправлений: 2)

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

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

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

аналогии от человека не являющегося экспертом в области, умиляют ещё больше, чем аналогии в целом.

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

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

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

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

некоторые сложные вещи на нём реализуются проще.

Ты имеешь в виду сложные алгоритмически или сложные в плане поддерживаемости кода? Если первое, то хотелось бы увидеть пример.

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

Ты так ничего и не понял. Щтучки вроде монады IO в хаскеле нужны не для того, что бы избавиться от «грязных» методов, а для того что бы отделить их от чистых. Если ты так любишь аналогии с гавном, то это равносильно складыванию всего говна в туалет. И если оно вдруг понадобилось, то зайти в туалет, использовать, помыть руки, выйти. Иди учи матчасть и не возвращайся, пока не въедешь.

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

Вот как раз по этой причине ФП ещё окончательно не издох — некоторые сложные вещи на нём реализуются проще.

ФП не издох (и врд ли издохнет) по той же причине, по которой не здохли твои плюсы. От современного программиста не требуется решать сложные инженерные задачи. От него требуется писать код, легкий в сопровождении. Несмотря на то, что каждый отдельно взятый быдлокодеришка глуп, в результате склейки быдлокода миллионов индусов энтерпрайз получит профит. Продукт можно создать 2 способами: при помощи блестящей идеи и ее блестящей реализации и при помоши кропотливого труда миллионна мартышек, методом тыков и рефакторингов. 2-й способ лучше, так как не требует квалифицированной рабочей силы. Это разделение труда в чистом виде, почитай Маркса что ли, если так не врубаешься. Выживают языки, которые способствуют разделению труда. Рано или поздно IT индустрия придет к таким языкам, на которых смогут писать блондинки. Основной проблемой здесь как-раз, является проблема совместимости, которую с успехом решает ФП.

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

IO является частью чистого ФП

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

А может кто-то не в курсах, кто такой ТС. Хотя это уже вряд ли :)

vonenij
()

Мы вообще лишены возможности рассуждать о вещах в общем смысле. ФП снижает абстракцию. Абстргирование стремиться к нулю.

Возьми ООП.

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

У него программа про реку, а не про животных или машины, так что не пойдет.

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

Тоесть это такой тонкий намёк на то, что вся индусня в скором времени перейдёт на хачкел? Серьёзно?

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

haskell/cpp-like, только проще. Более предметно-ориентированно, более узко.

Серьёзно?

Вполне. Быдло не может программировать без синтаксиса и «парадигм». Тобишь, не умеет программировать.

anonymous
()

Это импиративщина же. Причем здесь ФП?

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

Императивщик направляет говно в унитаз. А функциональщик

а принцессы не какают.

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

Ты имеешь в виду сложные алгоритмически или сложные в плане поддерживаемости кода? Если первое, то хотелось бы увидеть пример.

разве не очевидно, что пример слишком сложен для ЛОРа? Да и для меня...

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.