LINUX.ORG.RU

scheme. Какой-то он не функциональный


0

0

Доброго времени суток

Прочитал тут статью (http://kmmbvnr.livejournal.com/62197.html), которая в пух и прах разносит SICP и scheme, как цитадель удобства и функциональной парадигмы.

Выяснилось, что в схеме нет возможности выводить типы, создавать свои типы, нет pattern matching, нет еще много чего, чего я не понял. А самое главное - нет ленивых вычислений (т.е. их можно реализовать, но это не будет выглядеть, как органичный кусок языка и врятли сторонние библиотеки используют ленивые вычисления)!!!

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

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

★★★★★

>которая в пух и прах разносит SICP

неправильно значит читал

>scheme, как цитадель удобства и функциональной парадигмы

вообще-то SICP не об этом

>А самое главное - нет ленивых вычислений

и в *ML их нет. suspend/force никто не отменял, нужно - реализуй и пользуй. кстати, почему это "самое главное" интересно было бы услышать

>Скажите, в чем тогда профит читать SICP, коли язык такой ущербный?

SICP - не учебник по Scheme, это учебник программирования и проектирования. к слову, реализация "ленивого Scheme" там в пятой главе приводится (если мне не изменяет память) как пример, прошу прощения, металингвистической абстракции

>Не логичней сразу начинать с хаскеле-подобных языков?

логичней. но то, что SICP плохая книга (а Scheme - плохой язык) отсюда не следует

>Скажите, действительно ли все так плохо со scheme по сравнению с другими?

нет

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

Qi? интересно, как ты собрался совмещать "отсутствие синтаксиса" с паттерн-матчингом? а LISP с типизацией?

или ты очень толстый тролль, или ты сильно тупишь

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

>>SICP - не учебник по Scheme, это учебник программирования и проектирования.

Проектирование в рамках какой парадигимы?

И со scheme не все так плохо и логичней начинать с хаскеля. Как-то все сложно. Что же выбрать? И в какой парадигме писать на схеме, если не в функциональной?

>>Qi? интересно, как ты собрался совмещать "отсутствие синтаксиса" с паттерн-матчингом? а LISP с типизацией?

А почему это не получится?

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

>Проектирование в рамках какой парадигимы?

проектирование без рамок какой-либо парадигмы. в этом, собственно, и соль SICP'а

>Что же выбрать?

а ты попробуй и то и то. и сам реши что лучше подходит

>И в какой парадигме писать на схеме, если не в функциональной?

можно и в функциональной, кто ж мешает-то?

>А почему это не получится?

потому что противоречие. либо у тебя "отсутсвие синтаксиса", работа с голым AST - и все вытекающие из этого плюсы и минусы; либо синтаксический сахар (в том числе и для паттерн-матчинга)

динамическая типизация - тоже ключевая фишка LISP'а; впрочем, на Qi таки посмотри - может как раз придётся по нраву. правда оно поверх CL, а не Scheme

jtootf ★★★★★
()

> Выяснилось, что в схеме нет возможности выводить типы, создавать свои типы, нет pattern matching, нет еще много чего, чего я не понял.

А я лямбда-исчислении, прикинь, тоже нет типов.

> нет ленивых вычислений

А теперь попробуй вывести амортизированную сложность ленивого алгоритма. Что, не можешь? Вот и не трогай ленивые языки, они как минимум не для обучения.

anonymous
()

>> Прочитал тут статью (http://kmmbvnr.livejournal.com/62197.html), которая в пух и прах разносит SICP и scheme, как цитадель удобства и функциональной парадигмы.

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

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

>>А почему это не получится?

>потому что противоречие. либо у тебя "отсутсвие синтаксиса", работа с голым AST - и все вытекающие из этого плюсы и минусы; либо синтаксический сахар (в том числе и для паттерн-матчинга)

А чем какой-нибудь destructuring-bind не pattern matching?

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

> потому что противоречие. либо у тебя "отсутсвие синтаксиса", работа с голым AST - и все вытекающие из этого плюсы и минусы; либо синтаксический сахар

Для pattern matching не нужен синтаксический сахар.

Смотри на Mathematica - типов нет, синтаксиса самый минимум, а pattern matching ого-го.

anonymous
()

(match x
  [(list (or 'a 'b) 'c) #t])

пример паттерн-матчинга на Scheme.

Legioner ★★★★★
()

> цитадель удобства и функциональной парадигмы

Никто не обещал же.

Есть ленивые и типизированные диалекты Схемы.
Where is your Haskell now?

> чем тогда профит читать SICP, коли язык такой ущербный?


С таким подходом лучше вообще ничего не читать и не изучать.
Профит будет, когда прочитаешь и SICP, и кучу всего остального.
И, самое главное, напишешь кучу разного кода.

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

> А я лямбда-исчислении, прикинь, тоже нет типов.

Фигня. В БЕСТИПОВОМ лямбда-исчислении, действительно, типов нет. Вообще же таких лямбда-исчислений, где есть типы, на порядок больше, чем таких, где нет.

> А теперь попробуй вывести амортизированную сложность ленивого алгоритма. Что, не можешь?

А в чём, сбсна, проблема?

Miguel ★★★★★
()

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

SICP и не претендовал на звание цитадели удобства и функциональной парадигмы. Это не учебник по ФП. Сам Scheme - вполне себе функциональный язык.

> нет pattern matching

В scheme есть pattern matching.

> Скажите, в чем тогда профит читать SICP, коли язык такой ущербный?

Scheme не ущербный. Он просто не haskell. Чтобы понять, в чем профит читать SICP, и почему же ее так хвалят, может стоит почитать, а не флудить на ЛОР?

> Скажите, действительно ли все так плохо со scheme по сравнению с другими?

Со scheme все отлично.

satanic-mechanic
()
Ответ на: комментарий от jtootf

> логичней. но то, что SICP плохая книга (а Scheme - плохой язык) отсюда не следует

Со вторым доводом соглашусь. Но вы уверены, что начинать учиться программировать с haskell логичнее? Ведь одна из причин выбора scheme - это то, что не нужно учить язык, можно сразу заняться программированием, и именно это делается в SICP. Haskell же на самом деле язык сложный, т.е. реально сложнее Scheme / Erlang / Ocaml (если брать из той же функциональных языков). Почему же логично начинать обучаться программированию (вообще, а не функциональному) именно с него?

satanic-mechanic
()
Ответ на: комментарий от satanic-mechanic

>Почему же логично начинать обучаться программированию (вообще, а не функциональному) именно с него?

потому что он ближе всего к математической нотации. переход от той же теории рекурсии к реализации в Haskell прозрачен, в Scheme он требует понимания ряда ключевых LISP-ориентированных моментов. например того, что список - это cons-ячейка - а не просто набор конструкторов и селекторов

вообще же этот вопрос очень сложно обсуждать, потому как мы все уже умеем писать программы; причём как правило учились этому не на ФП. что сложнее переварить - мутаторы, cons-ячейки и префиксную нотацию, или бесконечные структуры данных?

не стоит воспринимать мою фразу слишком серъёзно. переход от матмоделирования к реализации на Haskell можно посмотреть здесь:

http://www.amazon.com/Haskell-Logic-Maths-Programming-Computing/dp/0954300696...

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

Если хочется ФП, то лучше Хаскел, наверное.
А если автору хочется изучить самый забубенный функциональный язык (у меня такое впечатление сложилось :), то можно попробовть Agda2. Кто там говорил, что л.с. без типов?

ratatosk
()

Хаскель-фанбои сделали мой день!

Начинать учиться программировать с Хаскеля? Покажите мне хоть одного живого человека, кому это удалось. C++ ещё посоветуйте, гыгыгы. На Схеме человек начинает писать уже с первых страниц SICP, причём на каждом этапе обучения ему даётся только та информация, которая дествительно нужна, ничего лишнего. Да в Схеме вообще лишнего мало, весь R6RS с предисловием и алфавитным указателем занимает 90 страниц, это один на ночь полистать. А прежде, чем на Хаскеле человек сможет делать самые простые упражнения из SICP, ему придётся впитать УЙМУ левой информации, к самим упражнениям имеющей мало отношения. Одну систему типов можно осмысливать неделями. А её придётся осмысливать, иначе даже не поймёшь, на что компилятор ругается. А потом ещё месяц привыкать к нетривиальному синтаксису. Потом насиловать мозг монадами. И в конце концов мы получим человека, умеющего программировать только на Хаскеле, такого только на Марс отправлять к зелёным человечкам, а среди людей ему делать нечего. А после SICP человек умеет программировать ВООБЩЕ.

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

> Вообще же таких лямбда-исчислений, где есть типы, на порядок больше, чем таких, где нет.

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

> А в чём, сбсна, проблема?

А почитай Окасаки, он это подробно объясняет.

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

> например того, что список - это cons-ячейка

Где ты в рекурсивной функции факториала нашел списки?

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

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

Нет. Формальная денотационная семантика типизированного лямбда-исчисления базируется обычно на domain theory и перехода к безтиповой лямбде не требует.

> А почитай Окасаки, он это подробно объясняет.

И он же объясняет, как это делается.

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

> Нет. Формальная денотационная семантика типизированного лямбда-исчисления базируется обычно на domain theory и перехода к безтиповой лямбде не требует.

Требует, требует - как ты domain theory опишешь? Любая система типов для своего определения требует уже наличия тьюринг-полной модели вычислений - то есть, одной из безтиповых - логика предикатов, SK-логика или лямбда.

> И он же объясняет, как это делается.

Как это делается через жопу и в очень исключительных случаях. При наличии жопы (то есть, bottom: _|_) не для каждого алгоритма можно вычислить стоимость.

anonymous
()
Ответ на: Хаскель-фанбои сделали мой день! от ero-sennin

>А потом ещё месяц привыкать к нетривиальному синтаксису

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

>И в конце концов мы получим человека, умеющего программировать только на Хаскеле, такого только на Марс отправлять к зелёным человечкам, а среди людей ему делать нечего. А после SICP человек умеет программировать ВООБЩЕ

по-твоему нельзя одновременно читать SICP и учить Haskell? как выше уже упоминалось, SICP - не учебник Scheme, это учебник программирования. и примеры из него вполне себе выполняются на Haskell (в статье, на которую ссылается топикстартер, это хорошо показано)

ну и более-менее аналог SICP'а для Haskell тут в комментариях уже мелькал - Haskell Road To Logic, Math And Programming; там даётся прямой переход от матмоделирования задачи к её реализации. на Scheme то же самое было бы куда более многословным и сложным для понимания

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

>А если автору хочется изучить самый забубенный функциональный язык

unlambda

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

>Ну ты что-то гнал, что понять рекурсию в схеме нельзя, не поняв про cons cells

анонимус, не шлангуй

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

> не путай. мы говорим о человеке, начинающем программировать - какая ему разница к чему привыкать? любой синтаксис будет ему непривычным, потому как он ни к чему ещё не привык :)

В Схеме синтаксиса практически нет. =)

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

Это как в 5 лет учиться читать, одновременно изучая семафорную азбуку и азбуку Брайля. Потом, у нас стоит цель научиться программировать, или научиться программировать на Хаскеле?

> SICP - не учебник Scheme, это учебник программирования. и примеры из него вполне себе выполняются на Haskell

При условии, что мы УЖЕ знаем Хаскель.

ero-sennin ★★
()
Ответ на: комментарий от jtootf

> Haskell Road To Logic, Math And Programming

Угу, на 8-й странице уже рассказывают о типах, на 9-й странице почти без объяснений вводят каррирование, чудные фразы типа "in this particular case, the type judgment gives a type scheme rather than a type". На 12-й странице уже встречается слово "конструктор", на 13-й новичку предлагается интуитивно понять pattern matching с его нетривиальным синтаксисом, тут же вводятся такие ужжасно важные вещи, как диапазон допустимых значений Int. И всё это ради того, чтоб разбирать детские задачки на уровне поиска НОД и поиска минимального значения в списке. А сами списки вводятся вообще без объяснений, будто все читатели с детского сада пишут на лиспе, и им это интуитивно понятно. Отличная замена SICP, обязательно куплю своим детям, гыгыгы.

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

> Требует, требует - как ты domain theory опишешь?

Я не очень понимаю, что значит "описывать теорию". Теория - она просто есть.

> Любая система типов для своего определения требует уже наличия тьюринг-полной модели вычислений

Опять-таки - не требует.

> При наличии жопы (то есть, bottom: _|_) не для каждого алгоритма можно вычислить стоимость.

Ну, это вообще общее свойство алгоритмов, с ленивостью ли, без неё ли.

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

>И всё это ради того, чтоб разбирать детские задачки на уровне поиска НОД и поиска минимального значения в списке. А сами списки вводятся вообще без объяснений, будто все читатели с детского сада пишут на лиспе, и им это интуитивно понятно. Отличная замена SICP, обязательно куплю своим детям, гыгыгы

ты пришёл принципиально потроллить или тебе есть что сказать по существу? то, что ты написал выше - чушь чуть более чем полностью, и ты сам это хорошо понимаешь

jtootf ★★★★★
()
Ответ на: комментарий от ero-sennin

>В Схеме синтаксиса практически нет. =)

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

>Это как в 5 лет учиться читать, одновременно изучая семафорную азбуку и азбуку Брайля. Потом, у нас стоит цель научиться программировать, или научиться программировать на Хаскеле?

у тебя есть опыт обучения программированию с Haskell? нет? тогда о чём мы вообще говориим?

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

Я пришёл спорить с теми сумасшедшими, которые предлагают Хаскель взамен Схемы для обучения программированию, как это было в статье по ссылке. Если ты не из их числа, то к тебе никаких претензий.

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

> Я пришёл спорить с теми сумасшедшими, которые предлагают Хаскель взамен Схемы, как это было в статье по ссылке.

Miranda, не Хаскель

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

>Я пришёл спорить с теми сумасшедшими, которые предлагают Хаскель взамен Схемы для обучения программированию, как это было в статье по ссылке. Если ты не из их числа, то к тебе никаких претензий

в статье по ссылке про Haskell вообще ни слова, там KRC и Miranda

а по существу - я никоим образом не предлагают заменить Scheme на Haskell; с тезисом Спольски том, что каждый программист должен знать C и LISP (указатели и рекурсию) я согласен. однако утверждение о том, что Haskell - плохой вариант в качестве первого ЯП, по меньшей мере, безосновательно. более того, есть удачные контрпримеры:

http://lionet.livejournal.com/27698.html

десятая строка говорит о том, насколько реально эффективно применять Haskell после 8-дневного курса обучения. да, Scheme для сравнения там нет, однако и задача не на поиск НОД

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

Для обучения просто программированию scheme + SICP может и не плох, но для обучения ФП лучше все таки взять Haskell.

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

Хорошо иметь много небольших задач для закрепления (хотя бы из того же SICP'а)

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

Я думаю, что Haskell ругают либо неосилившие, либо тролли...

imp ★★
()

>>Скажите, в чем тогда профит читать SICP, коли язык такой >>ущербный? Не логичней сразу начинать с хаскеле-подобных языков?

Не читайте подобные статьи пока задаетесь такими вопросами. Садитесь и узучайте SICP. В реальной жизни нет четко выраженных УЩЕРБННЫХ ЯЗЫКОВ и СЕРЕБРЯННЫХ ПУЛЬ. Всегда есть цели, средства и проблемы.

Статью я перевел т.к. это единственная адекватватная критика _обучения_ на Lisp/Scheme, которая мне попадалась. Заметьте не критика языка, а критика обучения.

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

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

Тоже очень понравилось. Кстати аналогичная ситуация в C++ с автоматическим управлением памятью.

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

Это имеет непосредственное отношениее вопросу к области применения External Domain Specific Languages. Но DSL это соовсем отдельные разговор...

kmmbvnr
()

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

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

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

>PHP

Ну.. на rsdn недавно было обсуждение.

На PHP стока всего написано, что как-то прям аж сразу отправить его в категорию УШЕРБНЫХ, не получается.

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

> я слышал что сейчас этот курс переводят на питон, так что возможно следующая редакция будет на нем

MIT уже не торт :) Думаю это просто слухи.

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

> На PHP стока всего написано, что как-то прям аж сразу отправить его в категорию УШЕРБНЫХ, не получается.

может, допинают библиотеку функций в http://haxe.org/doc/intro?lang=ru , до сопоставимой с PHP, и PHP вдруг станет не нужен, потому что есть компилируемый mod_nekovm

anonymous
()
Ответ на: Хаскель-фанбои сделали мой день! от ero-sennin

> А потом ещё месяц привыкать к нетривиальному синтаксису.

по-моему, синтаксис Хаскелля прозрачнее -- ближе к математической записи. А Лисп и Форт требуют поначалу некоторого усилия для "распарсивания выражений".

> Потом насиловать мозг монадами.

Прочитал "Gently introduction to Haskell". Пример с монадой с ресурсами показался очень жизненным -- это фактически монитор транзакций для встроенного DSL. На лиспе и схеме как-то не очень понятно как это делается -- ясно, что CPS, передача continuations, и т.п. но не очень ясно как это работает в целом, и как перейти от функционального к императивному (допустим, встраиваем DSL в императивный движок, или наоборот, императивный DSL в функциональный движок самого приложения). А тут вроде вполне наглядный пример. На схеме я бы запутался в скобках и упустил суть. Понятно, что это поначалу с непривычки, но если синтаксис помогает лишний раз не запутаться -- это правильный синтаксис. Что-то вроде примера с мобилями из статьи Вадлера.

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