LINUX.ORG.RU

Потрогать палочкой функциональщину

 


1

4

Привет всем. На фоне последних тем про всякие там лиспы и хаскелли возникло желание тоже стать «крутым» (ибо знание линукса уже крутостью не является) и поглядеть какой-нибудь из них.

А если серьезно, то хочется какой-нибудь функциональный язык, но не древний как экскременты мамонта и такой, чтобы хоть с вероятностью 0.0001 я мог бы применить в разработке. Что посоветуете? F#? Haskell? Scheme? Lisp?

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

Двачую, буквально позавчера наткнулся на пример, к которому было задание «поймите и опишите работу», и он выглядел вот так: https://gist.github.com/3407422 (помечено ;sheme code), я его просто для понятности переделал в ;racket code (на самом деле то же самое можно было и на scheme, но я просто использую racket для заданий из sicp). По-моему, читабельность и понятность повысились в разы. Можно, наверное, еще лушче, но я пока не очень. Листаю racket guide, но это тоже не учебник, скорее упрощенный референс. Не можешь ничего сказать про HTDP?

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

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

Почему теориями? Haskell - это больше эксперименты, чем реальная практика, хотя всякое бывает. Сама же идея сделать чистый функциональный язык языком общего назначения - чистый эксперимент.

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

Спасибо.

Я как раз немного по другому пошел, изучаю сначала Haskell, правда тяжело идет.

По OCaml, лучше читать - Developing Applications With Objective Caml?

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

«Компилятор» может использоваться как в смысле «продукт» (ГЦЦ, например), так и в более широком смысле решения задач обработки языков.

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

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

Не можешь ничего сказать про HTDP?

Мне не очень понравилось, но я читал уже будучи «погруженным» в Схему :)

пример

Эм, let* есть и в обычной схеме. А fluid-let — нет.

buddhist ★★★★★ ()
Последнее исправление: buddhist (всего исправлений: 1)
Ответ на: комментарий от SAA

По OCaml, лучше читать - Developing Applications With Objective Caml?

Cousineau G., Mauny M. «The functional approach to programming». Отличный вводный курс и в ФП, и в Ocaml.

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

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

А что с fluid-let, его тут уместно использовать? Не вижу места)

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

его тут уместно использовать?

Нет, просто вспомнил :)

Sketchy Scheme хороша еще тем, что опирается на стандартный синтаксис Scheme, в отличие от, например, Teach Yourself Scheme in Fixnum Days.

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

Алгол 68

Не застал этого монстра

для своего времени он вполне нормальный был, а вот идеи которые там были заложены опередили то время

сочувствую.

вот это я не понял

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

Компилятор - любой транслятор из одного языка в другой. По определению. Лошара ты, лошара!

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

Так ведь аллюзия на это и была рассчитана.

Сцена в камере, когда ночью обсуждают побег, а Василий Алибабаевич поднимает голову и говорит: «Заткнитесь, пожалуйста, а... Дайте спать» :)

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

А точно эту сцену я и запамятовал:)

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

По OCaml, лучше читать - Developing Applications With Objective Caml?

Перед изучением Haskell я читал «Introduction to Objective Caml» от Jason Hickey (возможно, книга незакончена). Просто и доходчиво. Мне понравилось. Меня интересовал прежде всего сам язык, а не библиотеки.

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

Есть ли смысл его «использовать»?

Ребята с xen.org активно его используют и очень хорошо на нем реализовали стек управления гипервизором.

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

Использовать Ocaml? На твое усмотрение. Язык развивается, но медленно последнее время.

Да и не смотри на возраст. Например, мне сейчас очень нравится Common Lisp, а его первый стандарт появился аж в 1984 году. И ведь сложно найти такое, чего бы не было в этом языке или нельзя было сделать на нем, кроме, разве что, вычислительных выражений, но это по своей особой причине (такмим были выбраны так называемые специальные операторы). Впрочем, жить можно и без вычислительных выражений. Кроме F# и Nemerle, их нет нигде больше.

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

Есть ли смысл его «использовать»?

Если можешь обойтись без батареек.

tailgunner ★★★★★ ()
Ответ на: А зачем от Eddy_Em

Ты же не программист (сам говорил). Тебе этого не понять. :)

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

Ну а что оно еще такое, как не лошара? Любой другой за столько лет поумнел бы троектратно. А пулеметчик как был чмом, так и остался. Поразительный экземпляр!

anonymous ()

erlang уже советовали? я с него начинал.

nanoolinux ★★★★ ()

я мог бы применить в разработке

Это зависит от того, в какой области ты работаешь. У меня например всякое универско/аспирантурское написано на коммон лиспе (потому что нравится этот язык) и скале (потому что тонны библиотек, а на джаве писать не попёрло), а вот личный проект я волоку на эрланге (потому что это практически мейнстрим для сетевых сервисов) и си (из-за скорости).

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

в перспективе — нет. пока же я не готов выкладывать код, ибо он уродлив чуть более чем наполовину)

а вообще проект запиливается под впечатлением nlp и ml курсов, которые идут на coursera.

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

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

проект естественно учебный, так что на оригинальность идеи не претендует)

ymn ★★★★★ ()

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

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

Поэтому я рекомендую Схему.

Присоединяюсь. и добавлю:

Более конкретно я бы псоветовал посмотреть Guile. Помимо всех достоинств схемы, он ещё и хорошо встраивается в проекты на С/С++, например.

А если нужно, чтобы был компилируемый вариант, тогда Bigloo.

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

Монады - это и есть вычислительные выражения.

Нет. Ты ошибаешься. Вычислительные выражения - это синтаксический сахар для монад и моноидов (таких как sequence/array/list expressions).

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

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

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

А я рекомендую Racket все-таки, потому что scheme - это какой-то академичный язык, а тс хочет батареек. А в racket есть и сеть, и фс, и гуй, и канпеляция в бинарники. И квадратные скобки!!1адинадин

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

Да я не спорю, сам сейчас Racket ковыряю, но на все его батарейки времени не хватает. Поэтому у меня, например, область практического применения Racket пока невелика из-за недостатка знаний. Другое дело Guile||Bigloo. Ну да ладно, ТС сам разберётся, чего он хочет, и выберет нужное.

DeVliegendeHollander ★★ ()
Ответ на: А зачем от Eddy_Em

А зачем

с этим связываться?

Только СИ, только сегфолты в программках на тысячу строчек

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

только сегфолты в программках на тысячу строчек

Все реже и реже. И строчек не так уж и много: не больше, чем в другом ЯП.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от SAA

Да ладно: если есть библиотеки, ты просто используешь библиотечную функцию. А если нет — все равно самому писать придется. А это уже как-то не сильно от языка зависит.

И да, на сях все прозрачно и понятно. Не то, что на этой вашей тарабарщине.

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Не то, что на этой вашей тарабарщине.

Она «тарабарщина» до первого более-менее внимательного взгляда на неё. Но я же уже говорил: коли ты сам заявлял, что не программист, то функциональщина возможно и в самом деле тебе ни к чему. Хотя разные варианты бывают.

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

Я знаю, как раз сегодня buddhist дал ссылку на обсуждение утверждения р6рс, там почти в каждом письме это отмечено)

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