[haskell] Функция inits

 
0
 
Functional languages
ava
tapa | 23.01.2010, 12:22
Привет.
У меня есть функция возвращающая список,начальных элементов списка
inits [x0,x1,x2] = [[],[x0],[x0,x1],[x0,x1,x2]] это соотв. для списка из 3ех элементов.


inits::[a]->[[a]]
inits [] = [[]]
inits (x:xs) = []:map (x:) (inits xs)


и я вот плохо понимаю рекурсию тут.  т.е. вот этот кусок  

map (x:) (inits xs)
,
функция map принимает в 1ом аргументе функцию, которую она применяет к каждому эл. списка,передаваемого во 2ом арг.
[]:(x1:([]:x1:x2:(..)))  вот это часть меня просто вымораживает :)

Если не очень сложно, распишите пожалуйста ход "работы" функции, ну т.е. пошагово.(например для списка [1,2,3,4])

ЗЫ: Можно ли как-то "заставить" хаскелл выдавать ход его действий, при работе функции?
ЗЫЫ: подскажите, где тусется сообщество по хаскел в ирк. на freenode, каналы #haskell.ru #haskell_ru пустые (взял с haskell.org)

Спасибо :)

Comments (2)
ava
Ryukzak | 23.01.2010, 12:40 #
Общий ход примерно такой. Сперва идёт "подставновка" функции, потом, когда все необходимые значения посчитаны, происходит вычисление. Выглядит как-то так. (имя функции сократил). Функция (1:)  - прицепить к списку голову 1.

i [1,2,3] -> 
[] : map (1:) (i [2,3]) ->
[] : map (1:) ([] : map (2:) (i [3])) ->
[] : map (1:) ([] : map (2:) ([] : map (3:) (i []))) ->
[] : map (1:) ([] : map (2:) ([] : map (3:) [])) ->
[] : map (1:) ([] : map (2:) ([] : [3])) ->
[] : map (1:) ([] : [2] : [2,3]) ->
[] : [1] : [1,2] : [1,2,3]


>> ЗЫ: Можно ли как-то "заставить" хаскелл выдавать ход его действий, при работе функции?
На сколько я знаю, никак. Да и суть декларативного описания и лени несколько теряется.
Если же надо посмотреть результат функции, то есть Debug.Trace. (грязная отладочная печать)

>>ЗЫЫ: подскажите, где тусется сообщество по хаскел в ирк. на freenode, каналы #haskell.ru #haskell_ru пустые (взял с haskell.org)
Про irc не скажу, но вот довольно оперативный ответ на вопросы по haskell обычно можно получить на ЛОРе.
ava
tapa | 23.01.2010, 12:42 #
Ryukzak, Спасибо огромное! smile
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  Ryukzak   tapa
Similar
advanced
Submit