LINUX.ORG.RU

[haskell,ruby,call/cc] Хочется сделать эквивалент примера с ruby на haskell и ещё много чего


0

0

Есть такой примерчик, тупо выводит последовательность по три числа: http://brainslugs.blogspot.com/2006/10/callcc.html. Писано на ruby. Можно это реализовать на haskell-е?

После чтения http://en.wikibooks.org/wiki/Haskell/Continuation_passing_style сложилось впечатление что callCC - это какая-то кривая замена простой лямбде и никакими контекстами там и не пахнет. Плохо читал?

В конечно счёте хочется получить последовательность берущуюся из БД по курсору. В принципе, наверное можно не замарачиваться на call/cc, ибо haskell ленивый, в endless loop не уйдёт, но интересно всё таки, да и прозрачно с сохранием контекста в котором бесконечная красота получается, ящитаю.

Пока что не получается сделать даже такое:

nums :: Cont r [Int]
nums = do
  ns <- callCC $ \k -> do
         k [1..]
  return $ take 5 ns

> runCont nums print
[1,2,3,4,5]
А вот как продолжить вычисления до 10, т.е. выполнить этот continuation второй раз? Просветите люди умные и добрые. (:


>А вот как продолжить вычисления до 10, т.е. выполнить этот continuation второй раз?

у тебя это будет не функция, а хз что. Грязное дело, в общем. Если уж так приспичило, то Control.Concurrent, возможно, поможет.

yet_another_lor_account
()

А никак. У тебя чистая функция и результат всегда будет одинаков.

Если нужно состояние State монада в помощь

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