Мягкое введение в Haskell
От: Денис Москвин (перевод) Россия  
Дата: 03.03.07 17:11
Оценка: 1546 (27)
Статья:
Мягкое введение в Haskell
Автор(ы): Пол Хьюдак, Джон Петерсон, Джозеф Фасел
Дата: 03.03.2007
Задача данного материала – обеспечить «мягкое» введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это «почти функциональный» язык, такой как ML или Scheme).


Авторы:
Денис Москвин (перевод)

Аннотация:
Задача данного материала — обеспечить ''мягкое'' введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это ''почти функциональный'' язык, такой как ML или Scheme).
Re[3]: Мягкое введение в Haskell
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 06.03.07 10:38
Оценка: :))) :))) :)))
deniok,

D>Я не виноват! То есть переводил я, но я перевёл просто как "Введение в Хаскелл". Все вопросы по поводу названия к уважаемой редакции


Ещё и отрезали по самые монады...
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Мягкое введение в Haskell
От: Starlight США  
Дата: 06.03.07 02:03
Оценка: +3 :)))
ДМП>Задача данного материала — обеспечить ''мягкое'' введение

Ну и название вы выбрали... Прям как для каких-нибудь рассказиков определенной тематики
Re[3]: Мягкое введение в Haskell
От: Кодт Россия  
Дата: 24.04.07 17:05
Оценка: 1 (1) :)))
Здравствуйте, TarasCo, Вы писали:

TC>о жестком введении?


Жёсткое введение — это когда тебе сразу вручат текст про бананы, линзы и разлохмаченный провод, причём на голландском языке. И читай как можешь.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[10]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 30.04.07 23:23
Оценка: :))) :)
Здравствуйте, deniok, Вы писали:

D>Эй! Обещал на голландском, а подсовываешь на эстонском


Это одинаковые языки. В том смысле, что я их одинаково не знаю
Re[7]: Мягкое введение в Haskell
От: EvilChild Ниоткуда  
Дата: 30.04.07 20:31
Оценка: 56 (2) :)
Здравствуйте, lomeo, Вы писали:

L>Найду — обязательно поделюсь, пока не вспомню.


Это?
Искал так.
now playing: Angelzero — Paranoia on the Rocks
Re[3]: Мягкое введение в Haskell
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 13.05.07 08:12
Оценка: +3
Здравствуйте, VladD2, Вы писали:

VD>Вообще-то сообщение более чем внятное.

VD>Компилятор, что не показал на место где была ошибка?

Внятное сообщение об ошибке еще не является оправданием того, что бы простейшие примеры конфликтовали со стандартным пространством имен. Как бы вам понравилось если бы в аналогичном простейшем С++-примере расчитанному на дилетантов именовали бы функцию как printf или SendMessage
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Мягкое введение в Haskell
От: Plague Россия 177230800
Дата: 26.04.07 07:48
Оценка: :))
Здравствуйте, palm mute, Вы писали:

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


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


L>>>Между прочим! Помните статья Фоккинги ходила на голландском (или кто он там) то ли по ТК, то ли по стрелкам. И ничего, все читали, благо картинок там было много, а язык математики что твой эсперанто.


M>>Не помните . Делись ссылкой


PM>Ты правда хочешь читать статью по теории категорий на голландском (у меня ссылки нет, просто из любопытства спрашиваю)?


Почему читать??? ты говорил о картинках! Комиксы по теории категорий на бочку! =)
Re[4]: Мягкое введение в Haskell
От: Mirrorer  
Дата: 06.03.07 12:20
Оценка: 6 (1)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Ещё и отрезали по самые монады...


Позанудствую
Копирайты забываете, молодой человек !
Как будем резать Хаскель?
Автор: VladD2
Дата: 03.02.07
"Если Вы отличаетесь от меня, то это ничуть мне не вредит — Вы делаете меня богаче". Экзюпери
Re[2]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 06.03.07 07:09
Оценка: :)
Здравствуйте, Starlight, Вы писали:

ДМП>>Задача данного материала — обеспечить ''мягкое'' введение


S>Ну и название вы выбрали... Прям как для каких-нибудь рассказиков определенной тематики


Я не виноват! То есть переводил я, но я перевёл просто как "Введение в Хаскелл". Все вопросы по поводу названия к уважаемой редакции
Re[2]: Мягкое введение в Haskell
От: TarasCo  
Дата: 24.04.07 12:44
Оценка: -1
P>А когда ожидать продолжения? =)

о жестком введении?
Да пребудет с тобою сила
Re[7]: Мягкое введение в Haskell
От: Mirrorer  
Дата: 26.04.07 07:52
Оценка: :)
Здравствуйте, palm mute, Вы писали:

PM>Ты правда хочешь читать статью по теории категорий на голландском (у меня ссылки нет, просто из любопытства спрашиваю)?


А в чем проблема то ? У меня был опыт чтения туториалов по Eclipse на японском (естественно я его не знаю)

Может окажется, что подробное текстовое описание мне мешает понять смысл, а вот зубодробительная математика в чистом виде даст просветление. В дзенском варианте. Палкой по башке
Re[8]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 30.04.07 21:23
Оценка: :)
Здравствуйте, EvilChild, Вы писали:

L>>Найду — обязательно поделюсь, пока не вспомню.


EC>Это?

EC>Искал так.

Точно
Re[9]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 30.04.07 23:03
Оценка: :)
Здравствуйте, lomeo, Вы писали:

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


L>>>Найду — обязательно поделюсь, пока не вспомню.


EC>>Это?

EC>>Искал так.

L>Точно


Эй! Обещал на голландском, а подсовываешь на эстонском
Re[4]: Мягкое введение в Haskell
От: R.K. Украина  
Дата: 13.05.07 07:52
Оценка: +1
Здравствуйте, lomeo, Вы писали:

L>Здравствуйте, R.K., Вы писали:


RK>>Ну или явно импортировать Prelude и захайдить length:


L>Маленькая поправка. Не явно, а квалифицировано (qualified).


Выдержка из того же "мягкого введения":

Programs implicitly import the Prelude module. An explicit import of the Prelude overrides the implicit import of all Prelude names. Thus,

import Prelude hiding length

will not import length from the Standard Prelude, allowing the name length to be defined differently.


А вот квалифицировано это будет примерно так:
import qualified Prelude as P

length                  :: [a] -> P.Int
length []               =  0
length (x:xs)           =  (P.+) 1 (length xs)

main = P.print (length [1,2,3])

Тоже можно, но в данном случае я предпочту явный импорт
You aren't expected to absorb this
Re[5]: Мягкое введение в Haskell
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.05.07 14:14
Оценка: +1
Здравствуйте, deniok, Вы писали:

D>Просто в обучении Хаскеллу сложилась такая практика — разбирать в качестве примеров реализацию функций из стандартной библиотеки. Во многих руководствах соответствующее предупреждение (о необходимости переименования) присутствует. В GIH в этом отношении, действительно, есть некоторая недоработка.


Дык сложилась, не сложилась... неужели трудно дать рабочий пример? С тем же экспортом и явным исключением.

В С-шных книгах тоже часто разбирают язык на базе фукцний из стандартных библиотек, но что-то я не видел каких-то конфликтов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Мягкое введение в Haskell
От: Plague Россия 177230800
Дата: 23.04.07 13:21
Оценка:
Здравствуйте, Денис Москвин (перевод), Вы писали:

ДМП>Статья:

ДМП>Мягкое введение в Haskell
Автор(ы): Пол Хьюдак, Джон Петерсон, Джозеф Фасел
Дата: 03.03.2007
Задача данного материала – обеспечить «мягкое» введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это «почти функциональный» язык, такой как ML или Scheme).


ДМП>Авторы:

ДМП> Денис Москвин (перевод)

ДМП>Аннотация:

ДМП>Задача данного материала — обеспечить ''мягкое'' введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это ''почти функциональный'' язык, такой как ML или Scheme).

А когда ожидать продолжения? =)
Re[2]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 24.04.07 11:01
Оценка:
Здравствуйте, Plague, Вы писали:


P>А когда ожидать продолжения? =)


Вроде обещали в следующем номере КЫВТ Ьфпфяшту (который вроде обещали вскоре выпустить)
Re[4]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 25.04.07 08:09
Оценка:
Здравствуйте, Кодт, Вы писали:

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


Между прочим! Помните статья Фоккинги ходила на голландском (или кто он там) то ли по ТК, то ли по стрелкам. И ничего, все читали, благо картинок там было много, а язык математики что твой эсперанто.
Re[5]: Мягкое введение в Haskell
От: Mirrorer  
Дата: 25.04.07 16:44
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Между прочим! Помните статья Фоккинги ходила на голландском (или кто он там) то ли по ТК, то ли по стрелкам. И ничего, все читали, благо картинок там было много, а язык математики что твой эсперанто.


Не помните . Делись ссылкой
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[6]: Мягкое введение в Haskell
От: palm mute  
Дата: 26.04.07 07:29
Оценка:
Здравствуйте, Mirrorer, Вы писали:

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


L>>Между прочим! Помните статья Фоккинги ходила на голландском (или кто он там) то ли по ТК, то ли по стрелкам. И ничего, все читали, благо картинок там было много, а язык математики что твой эсперанто.


M>Не помните . Делись ссылкой


Ты правда хочешь читать статью по теории категорий на голландском (у меня ссылки нет, просто из любопытства спрашиваю)?
Re[6]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.04.07 07:58
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Не помните . Делись ссылкой :)


Найду — обязательно поделюсь, пока не вспомню.
Re[8]: Мягкое введение в Haskell
От: palm mute  
Дата: 26.04.07 08:06
Оценка:
Здравствуйте, Plague, Вы писали:


P>Почему читать??? ты говорил о картинках! Комиксы по теории категорий на бочку! =)

Ты меня с кем-то путаешь. С lomeo, например .
Re[9]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.04.07 09:46
Оценка:
Здравствуйте, palm mute, Вы писали:

P>>Почему читать??? ты говорил о картинках! :)) Комиксы по теории категорий на бочку! =)

PM>Ты меня с кем-то путаешь. С lomeo, например :).

Кому картинки на голландском?
Re[10]: Мягкое введение в Haskell
От: Mirrorer  
Дата: 26.04.07 09:49
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Кому картинки на голландском?

Мне %)
А может зальешь на сайт, да ссылку поместишь ?
Re[11]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 26.04.07 10:29
Оценка:
Здравствуйте, Mirrorer, Вы писали:

L>>Кому картинки на голландском?

M>Мне %)
M>А может зальешь на сайт, да ссылку поместишь ?

Нет у меня :-) Найду — ссылку дам, обещаю. Даже не помню про что там, кажется всё таки про стрелки.
Re: Мягкое введение в Haskell
От: sharcUs Беларусь http://sharcus.blogspot.com/
Дата: 12.05.07 20:12
Оценка:
Здравствуйте, Денис Москвин (перевод), Вы писали:

ДМП>Статья:

ДМП>Мягкое введение в Haskell
Автор(ы): Пол Хьюдак, Джон Петерсон, Джозеф Фасел
Дата: 03.03.2007
Задача данного материала – обеспечить «мягкое» введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это «почти функциональный» язык, такой как ML или Scheme).


Спасибо за перевод, очень ценный материал.
Но позвольте немного позанудствовать:

В качестве примера пользовательской функции, работающей со списками, рассмотрим задачу подсчёта количества элементов в списке:

length                  :: [a] -> Integer
length []               =  0
length (x:xs)           =  1 + length xs


Данный код выдает ошибку:
Ambiguous variable occurrence "length"
*** Could refer to: Main.length Hugs.Prelude.length

дело в том, что в Prelude есть функция length, которая возвращает количество элементов, поэтому название для функции нужно изменить, например:

myLength                  :: [a] -> Integer
myLength []               =  0
myLength (x:xs)           =  1 + myLength xs

[q]

P.S. Понятно, что это непринципиально, но я по своей неопытности в этой области полчаса потратил, что бы до меня дошло, в чем тут ошибка. Интересно то, что данный пример фигурирует во многих публикациях, но такое чувство, что никому нету до этого дела, что здесь ошибка.
Re[2]: Мягкое введение в Haskell
От: R.K. Украина  
Дата: 12.05.07 20:17
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>дело в том, что в Prelude есть функция length, которая возвращает количество элементов, поэтому название для функции нужно изменить, например:


Ну или явно импортировать Prelude и захайдить length:
import Prelude hiding (length)
You aren't expected to absorb this
Re[3]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 12.05.07 22:43
Оценка:
Здравствуйте, R.K., Вы писали:

RK>Ну или явно импортировать Prelude и захайдить length:


Маленькая поправка. Не явно, а квалифицировано (qualified).
Re[2]: Мягкое введение в Haskell
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.05.07 22:58
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Данный код выдает ошибку:

U>Ambiguous variable occurrence "length"
U>*** Could refer to: Main.length Hugs.Prelude.length

U>дело в том, что в Prelude есть функция length, которая возвращает количество элементов, поэтому название для функции нужно изменить, например:


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


Вообще-то сообщение более чем внятное.
Компилятор, что не показал на место где была ошибка?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 13.05.07 08:22
Оценка:
Здравствуйте, sharcUs, Вы писали:

U>Внятное сообщение об ошибке еще не является оправданием того, что бы простейшие примеры конфликтовали со стандартным пространством имен. Как бы вам понравилось если бы в аналогичном простейшем С++-примере расчитанному на дилетантов именовали бы функцию как printf или SendMessage


Просто в обучении Хаскеллу сложилась такая практика — разбирать в качестве примеров реализацию функций из стандартной библиотеки. Во многих руководствах соответствующее предупреждение (о необходимости переименования) присутствует. В GIH в этом отношении, действительно, есть некоторая недоработка.
Re[5]: Мягкое введение в Haskell
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 13.05.07 08:57
Оценка:
Здравствуйте, R.K., Вы писали:

RK>>>Ну или явно импортировать Prelude и захайдить length:


L>>Маленькая поправка. Не явно, а квалифицировано (qualified).


RK>Выдержка из того же "мягкого введения":


А черт, я прочёл это как два варианта решения "явно импортировать" ИЛИ "захайдить length" :-)
Ночью писал.
Re[6]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 13.05.07 15:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Дык сложилась, не сложилась... неужели трудно дать рабочий пример? С тем же экспортом и явным исключением.


Я, вообще-то, лишь переводчик, а не соавтор.
Re[7]: Мягкое введение в Haskell
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.07 00:50
Оценка:
Здравствуйте, deniok, Вы писали:

D>Я, вообще-то, лишь переводчик, а не соавтор.


Дык это вообще-то не к тебе претензия. Просто так потянуло повозмущаться. Тем более что у нас тут много народу лазиет. Глядишь странслируют автору.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Мягкое введение в Haskell
От: St13en  
Дата: 06.07.08 04:59
Оценка:

Например, основной тип функции head – это [a]->a; типы [b]->a, b->a (в исходном тексте опечатка, a->a – прим.пер.) или даже a являются верными, но избыточно общими, в то время как типы вроде [Integer]->Integer являются слишком частными

В примечании неточность — в исходном тексте правильно. Поясню.
Тип [a]->a в переводе на русский: для списка элементов a вернуть результат типа a.
Тип [b]->a : для списка каких-то элементов вернуть результат какого-то типа.
Тип b->a : для какого-то типа (может быть и список, а может и не быть) вернуть результат какого-то типа.
Т.е. [a]->a является частным случаем [b]->a, который в свою очередь является частным случаем b->a.

PS спасибо за статью. это мой первый источник информации по haskell
Re[2]: Мягкое введение в Haskell
От: St13en  
Дата: 06.07.08 05:13
Оценка:
Не сообразил сразу что именно в исходном тексте написано неправильно (a->a), а в вашем варианте правильно ([b]->a). Подумал что вы в примечании указали правильный вариант.
Re[2]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 06.07.08 21:06
Оценка:
Здравствуйте, St13en, Вы писали:

S>

S>Например, основной тип функции head – это [a]->a; типы [b]->a, b->a (в исходном тексте опечатка, a->a – прим.пер.) или даже a являются верными, но избыточно общими, в то время как типы вроде [Integer]->Integer являются слишком частными

S>В примечании неточность — в исходном тексте правильно. Поясню.
S>Тип [a]->a в переводе на русский: для списка элементов a вернуть результат типа a.
S>Тип [b]->a : для списка каких-то элементов вернуть результат какого-то типа.
S>Тип b->a : для какого-то типа (может быть и список, а может и не быть) вернуть результат какого-то типа.
S>Т.е. [a]->a является частным случаем [b]->a, который в свою очередь является частным случаем b->a.

Не очень понял. Ваши рассуждения правильны, но в исходном тексте, насколько я помню, было a->a, что не верно, то есть не является ни избыточным обобщением, ни частным случаем principle type.
Re: Мягкое введение в Haskell
От: tonykent  
Дата: 24.05.09 08:48
Оценка:
Здравствуйте, Денис Москвин (перевод), Вы писали:

ДМП>Статья:

ДМП>Мягкое введение в Haskell
Автор(ы): Пол Хьюдак, Джон Петерсон, Джозеф Фасел
Дата: 03.03.2007
Задача данного материала – обеспечить «мягкое» введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это «почти функциональный» язык, такой как ML или Scheme).


ДМП>Авторы:

ДМП> Денис Москвин (перевод)

ДМП>Аннотация:

ДМП>Задача данного материала — обеспечить ''мягкое'' введение в программирование на Haskell для имеющих опыт программирования, по крайней мере, на одном языке, желательно функциональном (даже если это ''почти функциональный'' язык, такой как ML или Scheme).
Я тоже сделал перевод этой статьи Gentle Introduction to Haskell russian translation — и даже чуть раньше (11 сентября 2006 года). Как видите, язык у нас совсем разный, и форматирование тоже (у меня PDF приближенный к исходному). Надеюсь что и мой перевод будет прочтён вами.
Re[2]: Мягкое введение в Haskell
От: deniok Россия  
Дата: 24.05.09 10:33
Оценка:
Здравствуйте, tonykent, Вы писали:

T>Я тоже сделал перевод этой статьи Gentle Introduction to Haskell russian translation — и даже чуть раньше (11 сентября 2006 года). Как видите, язык у нас совсем разный, и форматирование тоже (у меня PDF приближенный к исходному). Надеюсь что и мой перевод будет прочтён вами.


Пусть расцветает сто цветов.
(c) Председатель Мао, Обращение к китайской интеллигенции, 1957

Re[2]: Мягкое введение в Haskell
От: MasterZiv СССР  
Дата: 24.05.09 20:06
Оценка:
tonykent wrote:

> даже чуть раньше (11 сентября 2006 года). Как видите, язык у нас совсем

> разный, и форматирование тоже (у меня PDF приближенный к исходному).
> Надеюсь что и мой перевод будет прочтён вами.

А что ж у тебя в PDF-е-то буквы прыгают в стоках, как будто их
кипятком внизу полили ?
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Мягкое введение в Haskell
От: Tonal- Россия www.promsoft.ru
Дата: 25.05.09 08:48
Оценка:
Здравствуйте, tonykent, Вы писали:
T>Я тоже сделал перевод этой статьи Gentle Introduction to Haskell russian translation — и даже чуть раньше (11 сентября 2006 года). Как видите, язык у нас совсем разный, и форматирование тоже (у меня PDF приближенный к исходному). Надеюсь что и мой перевод будет прочтён вами.
Прикольно.
Обрати внимание на страницы 68 и 69.
Такое впечатление, что реализация функции genMatMult "перепрыгнула".
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.