169 похожих чатов

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

мемоизировать функцию step?:

```
buildAlg :: forall m . MonadState Integer m => Point -> m (Alg m Point)
buildAlg dst = return $ Alg { select = select, step = step, stopCond = stopCond }
where
select :: m Direction
select = do
modify $ \n -> if even n then n div 2 else n * 3 + 1
state <- get
return $ toEnum $ fromIntegral state mod 4

step :: Direction -> Point -> m Point
step d (Point i j) = return $
case d of
U -> Point (i - 1) (j)
D -> Point (i + 1) (j)
L -> Point (i) (j - 1)
R -> Point (i) (j + 1)

stopCond :: Point -> m Bool
stopCond p = return $ dst == p
```

То есть есть некоторый алгоритм, который вызывает функции select, step и stopCond, и потенциально (например) step может быть тяжёлым и хочется закешировать результаты её работы.

Я пробовал подключить uglymemo, но он по-видимому работает только для рекурсивных функций, а хочется кэш, который бы переживал между вызовами, причём новый начинался бы с вызова buildAlg.

Полный пример здесь:
https://github.com/nlinker/playground/blob/master/haskell/stt-demo/src/Lib.hs

1 ответов

2 просмотра

Похожие вопросы

Обсуждают сегодня

Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
@sand_witch скорее к тебе вопрос, добавил в .cabal webdriver-w3c и вот такая ошибка от nix develop error: Package ‘script-monad-0.0.4’ in /nix/store/7vdxbra0kwbr0ys0kc5...
Fedor
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
Карта сайта