Why scheme rocks
От: Mr.Cat  
Дата: 05.10.09 10:15
Оценка: 2 (1)
Небольшая презенташка для тех кто сомневается, стоит ли знакомиться со scheme.
http://xivilization.net/flyserver/tex/schemerocks/schemerocks.pdf

(via reddit)
Re: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 10:39
Оценка: :))) :)
Здравствуйте, Mr.Cat, Вы писали:

Why evaluation is betteer than scheming.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[2]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 11:20
Оценка:
Здравствуйте, thesz, Вы писали:
T>Why evaluation is betteer than scheming.
Статьи любителей хаскеля (ну миранды в данном случае — не суть) про лисп и статьи любителей лиспа про хаскель (ну вот, например: http://www.lisperati.com/landoflisp/ — хотя это не совсем статья) очень похожи. А тут еще и 20 лет прошло с момента написания.
Re[3]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 11:58
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>Why evaluation is betteer than scheming.
MC>Статьи любителей хаскеля (ну миранды в данном случае — не суть) про лисп и статьи любителей лиспа про хаскель (ну вот, например: http://www.lisperati.com/landoflisp/ — хотя это не совсем статья) очень похожи. А тут еще и 20 лет прошло с момента написания.

Да, сравнить статью Вадлера с критикой SICP/Scheme в качестве инструмента обучения с landoflisp — это мощно.

Мне даже дополнить нечем, настолько всё прозрачно.

PS
За прошедшие 20 лет Scheme изменился не очень сильно. Сравни с Мирандой.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[4]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 12:13
Оценка:
Здравствуйте, thesz, Вы писали:
T>Да, сравнить статью Вадлера с критикой SICP/Scheme в качестве инструмента обучения с landoflisp — это мощно.
T>Мне даже дополнить нечем, настолько всё прозрачно.
Там критика того же порядка, что и критика хаскеля в land of lisp. Прямо сейчас у меня нет возможности детально ответить, но неправда начинается с первых же тезисов.

T>За прошедшие 20 лет Scheme изменился не очень сильно. Сравни с Мирандой.

Во-первых, сравни r3rs и r6rs. Во-вторых, это только ядро языка. В scheme не так много фич имеет смысл тянуть в стандарт — очень многое реализуется отдельными библиотеками.
Re[5]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 12:19
Оценка:
MC>неправда начинается с первых же тезисов.
В то время это, возможно, было правдой.
Но сейчас статья неактуальна.
Re[5]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 12:41
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>Да, сравнить статью Вадлера с критикой SICP/Scheme в качестве инструмента обучения с landoflisp — это мощно.
T>>Мне даже дополнить нечем, настолько всё прозрачно.
MC>Там критика того же порядка, что и критика хаскеля в land of lisp. Прямо сейчас у меня нет возможности детально ответить, но неправда начинается с первых же тезисов.

Да ты что!

Неправда, что streams и списки в Scheme различны?

Неправда, что сравнения с образцом в Scheme нет?

Неправда, что сравнение с образцом — более понятная запись?

Неправда, что раскрытие выражений со списками должно использовать цитирование списков?

"- Не советую. Съедят." (C) ПНВС

T>>За прошедшие 20 лет Scheme изменился не очень сильно. Сравни с Мирандой.

MC>Во-первых, сравни r3rs и r6rs. Во-вторых, это только ядро языка. В scheme не так много фич имеет смысл тянуть в стандарт — очень многое реализуется отдельными библиотеками.

О том и речь.

Сравнение с образцом есть, но оно в библиотеке. Типы есть, но они в библиотеке. Ленивые списки есть, но они в библиотеке и несовместимы с обычными.

Это и есть критика: в ядре языка слишком мало того, что необходимо для обучения без вникания в технические детали.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[6]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 12:55
Оценка:
Здравствуйте, thesz, Вы писали:
T>Неправда, что streams и списки в Scheme различны?
Различны. В scheme плохо с полиморфизмом — это я согласен. Только это не такая большая проблема.

T>Неправда, что сравнения с образцом в Scheme нет?

Неправда

T>Неправда, что сравнение с образцом — более понятная запись?

Более понятная, чем что?

T>Неправда, что раскрытие выражений со списками должно использовать цитирование списков?

Пропустил это место. Можно страничку?

T>"- Не советую. Съедят." (C) ПНВС

Ну пусть попробуют

T>Сравнение с образцом есть, но оно в библиотеке. Типы есть, но они в библиотеке. Ленивые списки есть, но они в библиотеке и несовместимы с обычными.

Ты говоришь так, как будто это что-то плохое.

T>Это и есть критика: в ядре языка слишком мало того, что необходимо для обучения без вникания в технические детали.

Какие еще технические детали? Как подключить библиотеку? Это критичная техническая деталь?
Re[7]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 13:04
Оценка:
Здравствуйте, Mr.Cat, Вы писали:
T>>Это и есть критика: в ядре языка слишком мало того, что необходимо для обучения без вникания в технические детали.
MC>Какие еще технические детали? Как подключить библиотеку? Это критичная техническая деталь?
PS: В plt вроде библиотеку с матчингом подключать не нужно — все доступно сразу. Хотя не помню точно.
Re[7]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 13:10
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

T>>Неправда, что streams и списки в Scheme различны?
MC>Различны. В scheme плохо с полиморфизмом — это я согласен. Только это не такая большая проблема.

Это отсекает целый класс элегантных решений. Backward state propagation, например, при анализе текстов. А так — да, не проблема.

T>>Неправда, что сравнения с образцом в Scheme нет?

MC>Неправда

Напиши, пожалуйста, sum со сравнением с образцом.

T>>Неправда, что сравнение с образцом — более понятная запись?

MC>Более понятная, чем что?

Чем рекурсивная запись с явными селекторами или предикатами.

T>>Неправда, что раскрытие выражений со списками должно использовать цитирование списков?

MC>Пропустил это место. Можно страничку?

Стр. 9, Confusion between program and data.

И ранее там тоже есть. Например, алгебраические свойства append лучше выглядят, когда он инфиксный.

T>>"- Не советую. Съедят." (C) ПНВС

MC>Ну пусть попробуют

Да всё уж, съели. Достаточно того, что ты толком-то статью не прочитал. И рьяно бросился сравнивать её с landoflisp.

T>>Сравнение с образцом есть, но оно в библиотеке. Типы есть, но они в библиотеке. Ленивые списки есть, но они в библиотеке и несовместимы с обычными.

MC>Ты говоришь так, как будто это что-то плохое.

Да, это плохо.

Например, ты всегда сможешь сделать unsafeCoerce в обход системы типов и это никак не будет выражено в программе.

"Здесь играем, а здесь я рыбу заворачивал" (С) известно, кто.

Используя Qi, один товарищ сказал, что смог доказать, что 42 — это строка. Это в <lj user=ru_lisp> было.

Вот он, результат системы типов в виде библиотеки.

T>>Это и есть критика: в ядре языка слишком мало того, что необходимо для обучения без вникания в технические детали.

MC>Какие еще технические детали? Как подключить библиотеку? Это критичная техническая деталь?

И это тоже.

Читай внимательней, что я могу сказать.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[6]: Длинная нудная статья, почему не Scheme
От: MasterZiv СССР  
Дата: 05.10.09 13:19
Оценка:
thesz пишет:

> Да ты что!


Вот я начинаю понимать, почему лисперы ещё не победили в
мировом масштабе. Разобщены, потому что.
Posted via RSDN NNTP Server 2.1 beta
Re[8]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 13:38
Оценка:
Здравствуйте, thesz, Вы писали:
MC>>Различны. В scheme плохо с полиморфизмом — это я согласен. Только это не такая большая проблема.
T>Это отсекает целый класс элегантных решений. Backward state propagation, например, при анализе текстов. А так — да, не проблема.
Не знаком с предметной областью, но видится мне, что ты преувеличиваешь.

T>>>Неправда, что сравнения с образцом в Scheme нет?

MC>>Неправда
T>Напиши, пожалуйста, sum со сравнением с образцом.
Код — вечером. Пока поброди здесь.

T>>>Неправда, что сравнение с образцом — более понятная запись?

MC>>Более понятная, чем что?
T>Чем рекурсивная запись с явными селекторами или предикатами.
Ну замечатьльно. А при чем тут scheme?

T>Confusion between program and data.

Раздел состоит из какого-то скобкофобского бреда.

T>Например, алгебраические свойства append лучше выглядят, когда он инфиксный.

Что значит лучше выглядят? С эстетической точки зрения?
И если ты про append со страницы 20 — там навскидку некорректный пример.

T>Например, ты всегда сможешь сделать unsafeCoerce в обход системы типов и это никак не будет выражено в программе.

T>Используя Qi, один товарищ сказал, что смог доказать, что 42 — это строка. Это в <lj user=ru_lisp> было.
T>Вот он, результат системы типов в виде библиотеки.
А система типов тут каким боком возникла?

MC>>Какие еще технические детали? Как подключить библиотеку? Это критичная техническая деталь?

T>И это тоже.

T>Читай внимательней, что я могу сказать.

Говорю же, прочитаю внимательнее, но потом.
Re[7]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 14:22
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>thesz пишет:


>> Да ты что!


MZ>Вот я начинаю понимать, почему лисперы ещё не победили в

MZ>мировом масштабе. Разобщены, потому что.

А главное, нет системы типов, что структурировала бы мышление.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[9]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 14:36
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

MC>>>Различны. В scheme плохо с полиморфизмом — это я согласен. Только это не такая большая проблема.
T>>Это отсекает целый класс элегантных решений. Backward state propagation, например, при анализе текстов. А так — да, не проблема.
MC>Не знаком с предметной областью, но видится мне, что ты преувеличиваешь.

The essence of functional programming, "Variation Six: Variation six: Backwards state".

T>>>>Неправда, что сравнения с образцом в Scheme нет?

MC>>>Неправда
T>>Напиши, пожалуйста, sum со сравнением с образцом.
MC>Код — вечером. Пока поброди здесь.

Там не видно, как написать рекурсивный sum, и будет ли рекурсия с match хвостовой.

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

T>>>>Неправда, что сравнение с образцом — более понятная запись?

MC>>>Более понятная, чем что?
T>>Чем рекурсивная запись с явными селекторами или предикатами.
MC>Ну замечатьльно. А при чем тут scheme?

При том, что в SICP объясняется так, а не иначе. В других туториалах тоже.

Это всё проблемы языка, если ты ещё не понял, что объясняют вот так некрасиво.

T>>Confusion between program and data.

MC>Раздел состоит из какого-то скобкофобского бреда.

Замечательный аргумент.

T>>Например, алгебраические свойства append лучше выглядят, когда он инфиксный.

MC>Что значит лучше выглядят? С эстетической точки зрения?

С "понимательской".

MC>И если ты про append со страницы 20 — там навскидку некорректный пример.


Нет, я про append и ++ со страницы 8 (AFAIR).

T>>Например, ты всегда сможешь сделать unsafeCoerce в обход системы типов и это никак не будет выражено в программе.

T>>Используя Qi, один товарищ сказал, что смог доказать, что 42 — это строка. Это в <lj user=ru_lisp> было.
T>>Вот он, результат системы типов в виде библиотеки.
MC>А система типов тут каким боком возникла?

Не кто иной, как ты спросил у меня, считаю ли я плохим то, что система типов не в языке, а в библиотеке.

Я привёл пример, почему система типов в библиотеке хуже, чем в языке.

MC>>>Какие еще технические детали? Как подключить библиотеку? Это критичная техническая деталь?

T>>И это тоже.
T>>Читай внимательней, что я могу сказать.
MC>Говорю же, прочитаю внимательнее, но потом.

Вот тогда и поговорим.

Пока же ты съеден чуть более, чем полностью.

И уже наполовину переварен.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[10]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 15:13
Оценка:
Здравствуйте, thesz, Вы писали:
T>и будет ли рекурсия с match хвостовой.
Будет

T>При том, что в SICP объясняется так, а не иначе.

T>Это всё проблемы языка, если ты ещё не понял, что объясняют вот так некрасиво.
T>Там не видно, как написать рекурсивный sum
Там описывается паттерн матчинг. Чтобы написать sum, надо включить моск. Или ты намекаешь, что некто, изучающий scheme по книгам 20-летней давности не найдет ничего про паттерн матчинг (например) и научится плохому? Да ради бога.

T>>>Confusion between program and data.

MC>>Раздел состоит из какого-то скобкофобского бреда.
T>Замечательный аргумент.
В ответ на замечательный аргумент "мне ваш синтаксис сложно понимать".

T>>>Например, алгебраические свойства append лучше выглядят, когда он инфиксный.

MC>>Что значит лучше выглядят? С эстетической точки зрения?
T>С "понимательской".
Ну я про то и говорю. В действии — скобкофобская мантра — "не понимаю я ваши скобки/префиксную нотацию/квотирование/etc.".

MC>>И если ты про append со страницы 20 — там навскидку некорректный пример.

T>Нет, я про append и ++ со страницы 8 (AFAIR).
Не нашел. Там вот про это?
map f (xs ++ ys) = map f xs ++ map f ys


T>Не кто иной, как ты спросил у меня, считаю ли я плохим то, что система типов не в языке, а в библиотеке.

Нет, про систему типов речи не шло. Речь шла о паттерн матчинге. Идея приклеивать систему типов сбоку на макросах мне самому не нравится.
Re[10]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 19:32
Оценка:
Здравствуйте, thesz, Вы писали:
MC>>Говорю же, прочитаю внимательнее, но потом.
T>Вот тогда и поговорим.
Прочитиал. Критика лиспа сводится к следующим пунктам (в контексте обучения программированию):
1. Нет паттерн-матчинга и пользовательских типов данных.
2. Статическая типизация лучше динамической.
3. Lazy лучше, чем eager.
4. Плохой синтаксис by design.
Первое неактуально.
Второе — спорно. В том, что статическая типизация — это хорошо — я согласен. Но не думаю, что она имеет решающее значение в выборе инструмента.
Третье — аналогично. Ленивость — это хорошо, не не критично, на мой взгляд. Тем более, такие вещи, как ленивые списки, в схеме тоже можно реализовать.
С четвертым согласиться не могу.

Кстати, обещанный нехвостовой sum на матчинге:
(define sum (match-lambda
    ((list) 0)
    ((list h t ...) (+ h (sum t)))))
Re[11]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 05.10.09 20:20
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, thesz, Вы писали:

MC>>>Говорю же, прочитаю внимательнее, но потом.
T>>Вот тогда и поговорим.
MC>Прочитиал. Критика лиспа сводится к следующим пунктам (в контексте обучения программированию):
MC>1. Нет паттерн-матчинга и пользовательских типов данных.
MC>2. Статическая типизация лучше динамической.
MC>3. Lazy лучше, чем eager.
MC>4. Плохой синтаксис by design.
MC>Первое неактуально.

Наверное, надо показать, что это действительно неактуально. А то поиск туториалов в гугле указывает на обратное.

sum пишут как угодно, только не через сравнение с образцом.

MC>Второе — спорно. В том, что статическая типизация — это хорошо — я согласен. Но не думаю, что она имеет решающее значение в выборе инструмента.


Она упрощает обучение.

MC>Третье — аналогично. Ленивость — это хорошо, не не критично, на мой взгляд. Тем более, такие вещи, как ленивые списки, в схеме тоже можно реализовать.


Она упрощает обучение.

Попробуй реализовать myif без макросов.

MC>С четвертым согласиться не могу.


Это уже дело вкуса, согласен.

MC>Кстати, обещанный нехвостовой sum на матчинге:

MC>
MC>;(define sum (match-lambda
MC>;    ((list) 0)
MC>;    ((list h t ...) (+ h (sum t)))))
MC>;


match-lambda откуда берётся? Почему match-lambda? Почему не просто match?
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[12]: Длинная нудная статья, почему не Scheme
От: Mr.Cat  
Дата: 05.10.09 20:58
Оценка:
Здравствуйте, thesz, Вы писали:
T>Наверное, надо показать, что это действительно неактуально. А то поиск туториалов в гугле указывает на обратное.
T>sum пишут как угодно, только не через сравнение с образцом.
Может, играет роль то, что матчинга не только нет в стандарте — на него нет srfi. Как известно, любимое занятие схемеров — ходить в лес и по дрова
Автор: Mr.Cat
Дата: 06.02.09
.
Ну и sum — какой-то странный пример. Там не так ярко выражена структурная индукция — ее "перебивают" fold и просто возможность сделать apply к сложению.

T>match-lambda откуда берётся? Почему match-lambda? Почему не просто match?

match-lambda — это match плюс lambda с одним параметром. Берется из plt-шной библиотеки.
Мне подумалось, что она из всех plt-шных матчей самая наглядная. Хотя я бы лучше сделал на макросах какой-нить match-define.
Если имплементация совсем дремучая — берется match.scm — там все то же самое, но он нерасширяемый и синтаксис слегка отличается.

MC>>Второе — спорно. В том, что статическая типизация — это хорошо — я согласен. Но не думаю, что она имеет решающее значение в выборе инструмента.

T>Она упрощает обучение.
MC>>Третье — аналогично. Ленивость — это хорошо, не не критично, на мой взгляд. Тем более, такие вещи, как ленивые списки, в схеме тоже можно реализовать.
T>Она упрощает обучение.
Вполне возможно, мне не с чем сравнивать, я ФП по хаскелю учил — потом уже познакомился со scheme.

T>Попробуй реализовать myif без макросов.

А ты попробуй написать функцию mylet.
Re[12]: Длинная нудная статья, почему не Scheme
От: Аноним  
Дата: 06.10.09 02:56
Оценка:
T>sum пишут как угодно, только не через сравнение с образцом.

А зачем писать sum именно через сравнение с образцом?

MC>>Второе — спорно. В том, что статическая типизация — это хорошо — я согласен. Но не думаю, что она имеет решающее значение в выборе инструмента.

T>Она упрощает обучение.

Для меня это не очевидно. Можешь обосновать?

MC>>Третье — аналогично. Ленивость — это хорошо, не не критично, на мой взгляд. Тем более, такие вещи, как ленивые списки, в схеме тоже можно реализовать.

T>Она упрощает обучение.

Тоже неочевидно.
Re[13]: Длинная нудная статья, почему не Scheme
От: thesz Россия http://thesz.livejournal.com
Дата: 06.10.09 09:08
Оценка:
Здравствуйте, Аноним, Вы писали:

T>>sum пишут как угодно, только не через сравнение с образцом.

А>А зачем писать sum именно через сравнение с образцом?

Потому, что это понятней. См. статью Вадлера выше.

Сравнение с образцом великая сила. Что самое интересное, впервые она появилась в Лиспе, будучи внесена туда отцом Конора МакБрайда (см. Dependently Typed Programs and their Proofs). Теперь, почему-то, лисперы этого чураются, говоря "а зачем оно нам нужно".

MC>>>Второе — спорно. В том, что статическая типизация — это хорошо — я согласен. Но не думаю, что она имеет решающее значение в выборе инструмента.

T>>Она упрощает обучение.
А>Для меня это не очевидно. Можешь обосновать?

См. статью Вадлера.

При манипуляции кодом, как данными, она разграничивает код (который надо цитировать) и данные (которые не надо). Например.

MC>>>Третье — аналогично. Ленивость — это хорошо, не не критично, на мой взгляд. Тем более, такие вещи, как ленивые списки, в схеме тоже можно реализовать.

T>>Она упрощает обучение.
А>Тоже неочевидно.

Стр. 20. статьи Вадлера.

head (map sqrt ([1..10] ++ [-1,-2..-10])) для ленивых списков (потоков) Схемы не равно head (map sqrt [1..10] ++ map sqrt [-1,-2..-10]). Во втором случае будет ошибка.

Как на Схеме создать myIf

myIf :: Bool -> a -> a -> a
myIf True  thenA elseA = thenA
myIf False thenA elseA = elseA


Без дополнительных сущностей типа макросов?

И вообще, прежде, чем задавать вопросы мне, ответь, пожалуйста, на критику Вадлера в статье выше.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.