All streams
Search
Write a publication
Pull to refresh
25
0

Пользователь

Send message
Я бы не стал так категорично называть попытки людей добиться лучшего старыми средствами извращениями. Зачем эти ярлыки, они обескураживают. Надо наоборот поддерживать разведку людьми разных возможностей.

К сожалению, у нас ФП уделяется мало внимания. Рад, что есть сторонники)
Милевский — интересный человек и его теория тоже. Соглашусь. Мой конфуз. Тогда вопрос к вам, что вы имеете в виду, когда говорите о посторонних эффектах и является ли присваивание его проявлением?

Доступ к волатильному объекту, модифицирование объекта, модифицирование файла либо вызов функции, выполняющей любую из этих операций, — все это побочные эффекты, которые представляют собой изменения в состоянии среды выполнения.


Также en.wikipedia.org/wiki/Side_effect_(computer_science)

Еще один пример программы без присвоений.
Вот тут я полностью согласен. Python скорее служит хорошим введением в ФП, если брать его функционал map/filter/reduce/zip и functools. Отсутствие оптимизации стека для хвостовой рекурсии в пределе делает невозможным полное и чистое ФП. Вместе с тем внедрение его принципов помогает четче излагать логику, избегать громоздкости ООП и смотреть на задачу под иным функциональным углом зрения, который ближе тому, как мы думаем.

Я наверно даже включу этот свой пассаж в статью)
А вы не читайте по утрам «советских газет» (с) ))

Русскоязычное Вики — это средство по насаждению заблуждений. Надо пользоваться корпоративными глоссариями, специализированными словарями и постами лидеров направлений. Одно только unit testing как «модульное тестирование» вызывает во мне негодование)). Unit в данном контексте — это единица кода, и она может быть строкой кода, блоком кода, функцией и только потом модулем. Правильный перевод мог бы быть «посегментное тестирование». А термин data mining как интеллектуальный анализ вызывает хохот. А что любой другой анализ НЕ интеллектуальный? Правильный перевод основан на горнодобывающей метафоре — добыча полезных ископаемых из данных, или же просто добыча полезных сведений из данных. И таких примеров десятки, если не больше.

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

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

Материал позаимствован на просторах иностранного интернета и не только. Присваивание означает наличие состояния и возможность иметь сайд-эффекты (побочные явления)
Чистая функция — функция которая не имеет внутреннего состояния, т.е. не имеет присваиваний внутри нее, и не имеет побочных эффектов на пространство за ее пределами. Как-то так.

В моем репо есть пример программы, где нет ни одного присваивания — только функции
Мда… Если мне не нравится, я прохожу мимо.
Хорошо, на зануде и остановимся)
Весомо). Однако не следует сводить pipe к особенностям F#. Он является неотъемлемой частью ФП еще со времен LISP. Гляньте сюда, если что.
Конвейер в том виде, который я предлагаю, позволяет (1) четче мониторить входы и выходы каждого шага внутри конвейера (2) легко отлаживать любой шаг и соответственно отлавливать дефекты, вставляя шаг debug, (3) но главное концентрировать всю логику в одном месте, которую легко уловить одним взглядом. Это что-то вроде нисходящего стиля программирования: корень — это pipe.

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

Я тоже никому ничего не обязан. Но при этом меня воспитывали относиться с априорным уважением и не позволять себе унижать кого-либо. Это ничего мне не стоит. Если мне не нравится, я прохожу мимо. Если вижу ошибку, сообщаю, что вот тут вот ошибка, без выкрутасов. Все просто.
)) Вы снова рационализируете тренд на невежливое и не бережное общение.
Ушло немного времени, чтобы освоиться.

Можно было просто подсказать. Это и называется отсутствием сотрудничества.
Я называю такие рассуждения рационализацией сложившегося ненормального статус-кво. Говорю это, имея современный опыт общения в англоязычном сегменте и опыт общения со спецами до нашей эры, когда компьютеры занимали комнаты. Я тогда, молодой спец из непрофильной кафедры, только осваивал Pascal, и ощущал бескорыстную помощь.
Цикл предусматривает мутируемость переменных, т.е. обновление значений локальных переменных на каждой итерации. Такая функция не считается чистой.
Разумеется, можно и с циклом. Но мы же говорим, по крайней мере, я имею в виду *чистый* функциональный код, основанный на, опять же, чистом функциональном мышлении. Цикл вносит процедурность. Изначально ЛИСП не имел циклов, только рекурсию.

На Python функциональность имплементируется, именно, так, как вы говорите. Пишутся функции с итерациями и в императивном стиле и даже в ООП-стиле. Потом они каррирутся и вуаля. Вот пример приведения объектного метода из точечной нотации в функциональный вид:
def splittext(t): return t.splitlines()

которую можно вставлять в тот же конвейер.
Рекурсия является необходимым условием, если вознамерился писать полностью функционально.
Скажите, а причем тут отладчик, если речь об исполнимом коде, т.е. причем тут время отладки, когда речь о времени исполнения?
Вы смотрели пост про функциональный конвейер? Он представляет собой прекрасный пример практического применения ФП на практике. При доработке он может содержать ветвления — все в функциональном стиле. Помимо этого, у меня есть примеры имплементаций моделей ML в виде конвейеров, простенькой экспертной системы и прочие вкусности типа графического интерфейса)) Хотел было продолжить серию. Будет время сделаю.

Кстати, обратите внимание на преимуществе конвейера в отладке кода — все оченнннно получается модульно.

И еще, этот материал не переводной, авторский)

Что касается list comprehension, то в английском питоновском языке еще есть dict comprehension и set comprehension, поэтому держитесь подальше от «спискового включения» ибо близоруко, т.к. dict и set по русски атрибутивно у вас не получится. Лучше говорить включение в список, в словарь, в множество
Это ошибка. Материал писался 3 года назад. Все работало.
Должно быть так:
>>> filtered = iter(filter(lambda x: x % 2 == 0, seq))

А потом вот так:
>>> next(filtered)
2
>>> next(filtered)
4

Благодарю, что подметили. Текст исправлен.
Это почему это? Подробности будут? Я вижу только тезисы без аргументов.
Я продемонстрировал идею функционально-ориентированного конвейера, который и вынесен в заголовок.
))
Ладно. Не вижу предмета спора. Но
Я уже 4-й года подписан в TradingView, мировом портале для экономистов и трейдеров. Мои первые скрипты на pinescript были наивными, но никто ни разу не позволил себе грубость и все такое. Уверен, даже ставили плюсы авансом. С тех пор мои скрипты регулярно входят в пятерку лучших, а за это время так и не было никаких инсинуаций. Я не в плане выпячивания, а в плане отношения — сомневаюсь, что у меня что-то получилось бы, если бы сыпались оскорбления и пр. мерзости. Замечу, что все мое общение там проходит в английском сегменте, и я, имея негативный опыт, даже не помышляю переходить на русский сегмент.

Мне кажется, проблема в самих наших людях — общество болеет, а те кто здоров, принимает статус-кво как должное. рационализирует.
Признайтесь, что этот кусок был взят из текста для другого языка. Почему я так думаю? Настоящая хвостовая рекурсия на Python невозможна. Python не выполняет никакой оптимизации стека… Хотя могу и ошибаться, т.к. приводимые мной тут примеры были написаны 3 года назад, и с тех пор мои интересы несколько поменялись.

Но вашу аргументацию принимаю и считаю ее весомой. У меня, кстати, есть несколько функциональных ядер для моделей ML, но есть и много функциональных игрушек. Но тут их не оценят, а я как-то потерял интерес сюда заходить после ушата хейта за последние дни.

Information

Rating
Does not participate
Registered
Activity