lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2006-12-12 02:50 pm

Двусвязные списки

У [livejournal.com profile] _darkus_ я чуть чуть порасписывал двусвязные списки. Мне понравилось решение к которому я пришёл. Хотя у Окасаки наверняка уже есть что то подобное.

[identity profile] thesz.livejournal.com 2006-12-12 11:53 am (UTC)(link)
Посмотрел.

Моё кунфу не дотягивает. ;)

У тебя, вон, mdo уже используется. ;)

[identity profile] lomeo.livejournal.com 2006-12-12 12:22 pm (UTC)(link)
Да ну! mdo - это всего лишь что то вроде letrec только для do.
Кстати, с mdo я не первый. В общем как всегда. В самом пропозале mdo (A recursive do in Haskell (http://citeseer.ist.psu.edu/erk02recursive.html)) приводится похожий пример :-/

Но вот идея с одновременным использование 2 list и mutable nodes представлений мне нравится. Очень эффективно получается. Хотя наверняка тоже до меня кто то придумал.

[identity profile] rvp74.livejournal.com 2006-12-12 03:48 pm (UTC)(link)
Если реализовывать стрелки SP m a b, то loop потянет за собой требование на использование mdo

[identity profile] lomeo.livejournal.com 2006-12-12 03:59 pm (UTC)(link)
Что такое стрелки SP? И, честно говоря, сомневаюсь, что есть что то требующее использование mdo. Обычно последующую привязку можно сделать отложенными вычислениями.

[identity profile] rvp74.livejournal.com 2006-12-12 04:05 pm (UTC)(link)
всмысле SF:

newtype SF m a b = SF { runSF :: a -> m (b, SF m a b) }

loopSF sf = SF $ \a -> mdo ((c,d),sf') <- runSF sf (a,d)
return (c,loopSF sf')