Talvez as funções de síntese (operação entre BDDs) ficariam mais claras usando mônadas.As figuras desse artigo lembram bastante as figuras que fiz no meu :P Depois vou dar uma olhada com mais calma.Para vocês não terem que ler o meu código, segue uma ilustração do que fiz, usando fibonacci:import Data.Map as M-- 'wrapper' para inicializar o mapa de memoizaçãofibonacci n = fst $ fib n M.emptytype Memo = M.Map Int Intfib :: Int -> Memo -> (Int, Memo)fib 0 memo = (0, memo) -- caso basefib 1 memo = (1, memo) -- caso basefib n memo = fib' n (M.lookup n memo) memo -- confere o mapa de memoizaçãofib' :: Int -> Maybe Int -> Memo -> (Int, Memo)fib' _ (Just x) memo = (x, memo) -- usa o resultado memoizadofib' n _ memo = (n1 + n2, memo'') -- definição recursivawhere (n1, memo') = fib'' (n - 1) memo(n2, memo'') = fib'' (n - 2) memo'-- faz a recursão e memoízafib'' n memo = (r, M.insert n r memo')where (r, memo') = fib n memoAssim, eu uso memoização e o algoritmo fica bem eficiente, em contrapartida o código é sujo e confuso.Tem como manter a recursão dupla, mas não ter que ficar passando o mapa de Memoização por todo lado? Ou ao menos da memoização não ficar tão explícita?Abraços,
EricEric2013/8/16 Rodrigo Ribeiro <rodrigogribeiro@gmail.com>RodrigoOi Eric, tudo bom?Dei uma olhada rápida no seu código e uma possível maneira de evitar a passagem de parâmetros adicionais em funções é usar uma mônada (State ou Reader). Caso o uso de mônadas não seja vantajoso, esse artigo trata de um problema similar:
http://www.cs.nott.ac.uk/~nhn/TFP2006/Papers/09-ChristiansenHuch-APurelyFunctionalImplementationOfROBDDs.pdf
[ ]s2013/8/15 Eric Kinoshita <eric.void@gmail.com>
_______________________________________________Oi pessoal,Fiz a tradução do meu TCC pra haskell. Vide link abaixo.https://bitbucket.org/ericvoid/robddGostaria que vcs dessem uma olhada, para ver se tem como melhorar.Des do ultimo dojo consegui dar um upgrade no código. Dei uma boa organizada e troquei as listas por Maps. Isso deu um ganho de eficiência gigante. Mas o arquivo de síntese é o que deve estar mais bagunçado.Será que tem alguma forma de memoizar uma função sem ter que ficar passando a estrutura de dados para todo lado?Obrigado,Eric
haskell-br mailing list
haskell-br@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-br
_______________________________________________
haskell-br mailing list
haskell-br@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-br