LINUX.ORG.RU

Вред мощных выразительных ЯП


0

3

Заметил по себе. Страдаю

http://lukeplant.me.uk/blog/posts/why-learning-haskell-python-makes-you-a-worse-programmer/

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

А вы?

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

все верно говоришь но представим себе сишника котрый изучил лисп и понял силу макросов. итого теперь его код - сплошные define

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

> представим себе сишника котрый изучил лисп и понял силу макросов.

итого теперь его код - сплошные define


Поскольку define в C никакого отношения к макросам в лисп не имеет, то представить такое довольно проблематично.

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

> Остальное и так пишу на Scala

В чем пишешь? А то в IDEA/Eclipse поддержка Scala пока весьма кривая по сравнению с Java.

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

Так что основной профит от изучения всяких Ъ-языков - не сам факт написания программ на них, но получение дополнительного измерения (в мозгу) для особенного видения и восприятия проблем и, соответсвенно, их решений.

Вот хорошо сказал.

Deleted
()

> Java -> Scala -> Java

C++vcl->C#->C++stl->Nemerle->C#->C++->F#->C->Python->F#->C#->Nemerle->C++mfc cli...etc...

Пойду повешусь )

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

> чем idea-то не нравится?

Пока IDEA очень часто «находит» ошибки в коде, который нормально компилируется. Почти в любом файле из стандартных библиотек Scala «находит» ошибки. И при редактировании кода жутко тормозит.

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

> Но может, конечно, я слишком непритязателен.

По сравнению с поддержкой Java там пока все криво и тормозит.

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

Надо попробовать и эту IDE, давно ее не смотрел.

kamre ★★★
()

А почему ЖЖ

в тех. разделе?

Eddy_Em ☆☆☆☆☆
()
Ответ на: Еще один вопрос от vertexua

Почему после применения ФП так и хочется вместо цикла применить хвостовую рекурсию.

Злоупотребление явной рекурсией в ФП - нехороший признак. Почти как goto в императивщине.

Освой, наконец, fold-ы.

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

цыклы нужны редко когда есть fold, map, grap и прочие вкусности.

Я говорил не о функциях высшего порядка, а именно о хвостовой рекурсии

bga_ говоорит, что если есть mapcar/reduce/remove-if, то рекурсивные функции переписываются в терминах свёртки списков.

Да, кстати, вот возьми россыпь скобочек ((((((() (((()) () () ()) ((((()) ()) ()))) ((())))))))) такими путями они тебе скоро понадобятся.

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

> Писать на своем любимом яп прогу генерирующую код на требуемом яп. Решающий поставленную задачу

два чая товарищу... Только надо быть аккуратным что бы код более мене генерировался читабельным для «галерных рабов» %)

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

> Так что тут уже насрать, на чём потом писат

ну это у кого желудок крепкий и мозоли не сошли на привычных местах

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

> Я говорил не о функциях высшего порядка, а именно о хвостовой рекурсии - которая является банальным не паралелизируемым циклом.

Не всякая хвостовая рекурсия сводится к циклам.

Я от этого треда ждал большего, но тема лиспа осталась нераскрытой.

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

Далеко не каждая рекурсия выразима фолдами. Ты же это прекрасно знаешь.

Начнём с того, что в моём комменте было слово «злоупотребление», смысл которого несколько отличается от смысла слова «употребление».

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

>Функцию Аккермана на свертках в тред or GTFO.

С учётом того, что на приемлемых аргументах она легко разворачивается в несколько простых выражений - боюсь свёртки могут и не понадобиться

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

Функцию Аккермана на свертках в тред or GTFO.

Свёртка для натуральных чисел выглядит так:

foldNat : forall {a} -> a -> (a -> a) -> nat -> a
и определяется так:
foldNat init step zero = init
foldNat init step (succ y) = step (foldNat init step y)
Далее, функцию Аккермана написать довольно легко:
ackStep : (nat -> nat) -> nat -> nat
ackStep f = foldNat (f 1) f
ack : nat -> nat -> nat
ack = foldNat succ ackStep

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

Твой foldNat в игрек-комбинатор разворачивается. Это называется «без рекурсии»? Давай не жульничай.

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

Это называется «без рекурсии»?

Так ты что просил? Мне казалось, ты просил «функцию Аккермана на свёртках», а не «свёртку без рекурсии».

Да, кстати, не бросайся словами, которых не понимаешь: в Агде (а это именно в ней написано) игрек-комбинатора нет.

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

> Так ты что просил? Мне казалось, ты просил «функцию Аккермана на свёртках», а не «свёртку без рекурсии».

Тебя просили написать функцию Аккермана на свертках, вместо этого ты написал игрек-комбинатор, обозвал его foldNat и посчитал функцию Аккермана.

Да, кстати, не бросайся словами, которых не понимаешь: в Агде (а это именно в ней написано) игрек-комбинатора нет.

Ну отличие одно - игрек-комбинатор применяет ф-ю неограниченное число раз, а твой - пока не получим zero.

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

вместо этого ты написал игрек-комбинатор, обозвал его foldNat

Ещё раз: foldNat - это и ЕСТЬ свёртка. Написана в моём комменте исключительно для ясности. Если выкинуть её определение, тебе будет легче?

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

> Ещё раз: foldNat - это и ЕСТЬ свёртка.

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

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

> Хорошо, напиши сам свёртку для типа nat.

Ну это уже смешно. во-первых, то, что ты написал - катаморфизм, а не свертка. Во-вторых - nat по дефолту не определено как АТД, и как ты теперь свой катаморфизм напишешь?

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

> так пусть же берегут такого гения как зеницу ока :)

Я тут на кал изошёл, чтобы перевести проект со второго шарпа на четвёртый. Теперь меня все ненавидят, потому что всё что дальше базового ООП, «это сложно» и «не понятно». И все дружно продолжают ваять тайпкасты, не зная про ковариантность, и тонны циклов, не врубаясь в LINQ.

Кругом сидят макаки. И редко кто будет разрешать тебе писать непонятный макакам код. Потому что завтра тебя может переехать трамвай - а макакам нужно будет твой код поддерживать и развивать.

--------

// NightmareZ

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

1) Врядли другие просто не могут понять ФП, а ты гениальный уникум который осилил эту космически сложную тему

2) Сделай им мастер класс и радуйся

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

> 1) Врядли другие просто не могут понять ФП, а ты гениальный уникум который осилил эту космически сложную тему

В том то и дело, что я совсем-совсем НЕ гений. От того и лютый баттхёрт по поводу окружающих.

2) Сделай им мастер класс и радуйся

У нас принято делать мастер классы. Другое дело, что недавно нам на одном таком тимлид рассказывал про синглетоны и все на это дело фапали. Куда уж до ФП...

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

Я рассказывал и красочно расписывал о том, какие преимущества это всё даёт. И кроме того мы ничего, совершенно ничего не потеряем. Более того пара программеров меня поддерживала... до тех пор, пока один тимлид не впал в бешенство и не стал нести ересь вроде «незачем использовать LINQ ради экономии нескольких строк, ведь всё можно циклами сделать!!!111»

anonymous
()

возвращаясь к поездкам на велосипеде без седла после поездок на обычном велосипеде начинаешь испытывать баттхерт и демотивируешься

заметил по себе, страдаю

// починил

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

В тебе можно было и не сомневаться. // Анонимус, который просил ф-цию Аккермана на свертках.

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

Потому что в LINQ будет очевидна операция. Так же как при итерации for более очевиден чем while, так же LINQ более читаем чем любой цикл

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

Ну мы говорили о случае когда есть TCO

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

> Потому что в LINQ будет очевидна операция. Так же как при итерации for более очевиден чем while, так же LINQ более читаем чем любой цикл

Ну... да. Что сказать то хотел? Или ты решил КО прикинуться?

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