LINUX.ORG.RU

Встречайте новый язык программирования — Sifflet 1.0

 , , sifflet,


0

1

Первая версия визуального функционального языка программирования Sifflet отныне доступна на hackage.

Назначение этого языка — помочь студентам познать рекурсию.

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

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

Данная возможность позиционируется авторами как вспомогательная и в познавательных целях.

Почитать про новый язык можно на странице проекта

Учебник.

>>> Анонс выпуска

★★★★★

Проверено: svu ()
Последнее исправление: MuZHiK-2 (всего исправлений: 1)
Ответ на: комментарий от Rastafarra

Дебилятка, а ты видишь фундаментальную разницу между UML и кодом? Полон ЛОР сопливых недомков...

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

Ты чё вякнула, свинья? Не тебе оценивать, кто там что правильно сказал - ты в этой теме пока кроме бреда ничего не насрал.

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

> Алё, там foldr а не foldl

Внимание! Прозвучало очень важное замечание.

Видимо, разница между ((([] ++ list1) ++ list2) ++ list3) и (list1 ++ (list2 ++ (list3 ++ []))) очень велика. Особенно, учитывая ассоциативность операции (++) и нейтральность [] относительно (++).

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

Кстати, в Data.List определенно именно с помощью foldr.

-- | Concatenate a list of lists.
concat :: [[a]] -> [a]
concat = foldr (++) []
balodja ★★★
()
Ответ на: комментарий от anonymous

> Алё, там foldr а не foldl

...

ты видишь фундаментальную разницу между UML и кодом?

я так понимаю в треде поселился глупый онанимус? :)

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

еще один гвоздик в гроб петона.

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

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

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

мдам. Качество образования помимо всего прочего зависит еще и от инструментов, которыми, собственно, проводится. И наличие языка, наглядно демонстрирующего пусть и не очень сложную концепцию, безусловно благое дело.

ЗЫ если понять рекурсию несложно, то выражать рекурсивно(или даже с помощью ФВП) привычные алгоритмы на первых порах не так уж просто.

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

> тссс....! не спугни.

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

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

>Идиёт. Вон из профессии.

А вот и представитель упомянутой молодёжи отозвался, похоже :)

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

>> Внимание! Прозвучало очень важное замечание.

Видимо, разница между ((([] ++ list1) ++ list2) ++ list3) и (list1 ++ (list2 ++ (list3 ++ []))) очень велика. Особенно, учитывая ассоциативность операции (++) и нейтральность [] относительно (++).

Внимание! Разница действительно есть. Ликбез. Список односвязный и добавление в голову не вызывает изменения исходного списка. При добавлении в конец требуется скопировать исходный список. А поскольку у вас таких операций 3, то и копирований будет 3. Это что касается вашего примера. А на деле обратный фолд делают через continuations, для избавления от тупого многократного копирования списка.

А потом эти люди говорят, что в хаскелле списки пересоздаются каждый раз.

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

То есть ты не согласен, что итоговый список будет одинаковый? Для меня это что-то новенькое. А можно на пальцах объяснить?

P.S. Разница только в ленивости.

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

>>Чтобы понять рекурсию нужно понять рекурсию©

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

man Хвостовая рекурсия

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

>Любой компилятор использует трансляцию в императивные конструкции.

Да неужели? Ты уверен?

А также любой компилятор разворачивает хвостовую рекурсию в цикл.

Не любой. Hint: gcc делает это только если явно ему сказать об этом, или -O2

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

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

Ужас.


Ты не поверишь, но Паскаль в свое время создавался чтоб отучить студентов использовать goto, для чего создавался Си вообще промолчим =)))

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

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

Ты знаешь для чего предназначены блок-схемы? Блок-схемы это единственное возможное наглядное представление программ на ассемблере

DNA_Seq ★★☆☆☆
()

Отправить к матрёшку, что ли....

grait
()

господа:

научите дурака как в debian фильтрануть ЯП(и только core-пакет ЯП) в репозитарии. только осилил «aptitude search '?description(programming language)' | grep -v library | grep -v lib | grep -v module | grep -v component | less». Но чую. Криво это. 302 пакета выдаёт. имхо раза в 3 надо уменьшить.

anonymous
()

какой прикол читать этот тред на английском в переводе гугля :)))


Same Haskell [«Тот же хаскелль».]

Assembler and C + + the same, and there, and there is code generation:)

lolnub tunnels? I'm talking about uml -> code.

petonist come?

But there is a morphism!

Irrelevant garbage detekted. (There, I just expressed through the partition and dropWhile katamorfizm on the lists)

Do not believe it, but find. Show me the language that has no cycles.

A. .. Li ... SQL?

Programming Languages myshevoznogo not needed.

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

> Разница в том, что фолд «слева-направо» оптимальнее.

обсуждается оптимальное написание неработающего реверса? класс ))

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

>обсуждается оптимальное написание неработающего реверса? класс ))

Да и так уже все поняли, что обсуждается работающий concat =)

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

>Списки безусловно будут одинаковыми. Разница в том, что фолд «слева-направо» оптимальнее.

Неправда :3

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

>>Списки безусловно будут одинаковыми. Разница в том, что фолд «слева-направо» оптимальнее.

>Неправда :3

Тут со сверткой и конкатенацией непонятки, а кто-то еще говорит, что рекурсия проста. А если учесть возможную ленивость, хвостовую рекурсию и переполнение стека? Или этот пример не так прост? ;)

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

А то, что

head $ foldl (++) [] $ repeat "abc"
в отличии от варианта с foldr не посчитается никогда это фигня, ведь главное - чтоб был морфизм! лол

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

>А если учесть возможную ленивость, хвостовую рекурсию и переполнение стека?

Ну, именно благодаря ленивости foldr тут лучше подходит.

Waterlaz ★★★★★
()

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

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

Согласен, а для энергичных и нечистых языков нужны грязные императивные хаки типа скаловского ListBuffer.

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

> любой FP даст отличное понимание рекурсии

Вот с этим более-менее согласен.

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

> Неправда :3

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

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

Ага, сравни фразы «познать женщину» и «понять женщину»

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

>что то совсем ниочём.. любой FP даст отличное понимание рекурсии

наоборот, любой FP потребует отличное понимание рекурсии.

Именно поэтому FP так сложно даются императивщикам.

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

Все дело в ленивости, а также в том, что (++) всегда копирует свой левый аргумент, хотя тоже лениво :) При первом же паттерн-матчинге concat выдаст head результата немедленно, оставив tail на потом.

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

> Да неужели? Ты уверен?

На 100%. Ассемблер (и, соотв., исполнимый код) - императивный.

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

> для чего создавался Си вообще промолчим =)))

Судя по википедии, для написания клона астероидов :)

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

Когда не в теме, ты лучше молчи. Потому что, во-первых, чуть повыше есть фраза «P.S. Разница только в ленивости», во-вторых, про морфизм  — это эпическая цитата квазимото, в-третьих, что concat должен быть с foldl'ем говорил тот эпический анонимус, а не я.

Но тебе-то до этого что? Тебе главное «лол» написать, и совсем неважно, что этот лол — это ты.

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

> Качество образования и молодёжи на столько упало

Да, выделка молодёжи уже не та, а всё от того что большую часть молодёжи производят в Китае.

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

>> ЗЫ если понять рекурсию несложно, то выражать рекурсивно(или даже с помощью ФВП) привычные алгоритмы на первых порах не так уж просто.

Саме главное, что ненужно.

frost_ii ★★★★★
()

оно в debian/ubuntu ставится через cabal... короче много deprecated, старая версия cabal и неудовлетворённые зависимости... не собрался велосипед

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

>> ЗЫ если понять рекурсию несложно, то выражать рекурсивно(или даже с помощью ФВП) привычные алгоритмы на первых порах не так уж просто.

Саме главное, что ненужно.

Нужно, нужно. Привычка - это дело такое.

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

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

Упс! Вот здесь ты и «попал»:)

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

Причём здесь привычка? Со своей стороны использую рекурсию широко, но тем не менее считаю, что совать её во все дыры - полнейший идиотизм. А языки ради этого городить - шизофрения.

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

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