Pergunta

Acabei de descobrir a biblioteca Boost Phoenix (escondida no projeto Spirit) e como fã do estilo de programação funcional (mas ainda amador;alguma pequena experiência com haskell e esquema) eu queria brincar com esta biblioteca para aprender sobre aplicações razoáveis ​​desta biblioteca.

Além do aumento da expressividade e clareza do código utilizando o estilo fp, estou especialmente interessado em avaliação preguiçosa para acelerar cálculos a custos baixos.

Um exemplo pequeno e simples seria o seguinte:existe algum tipo de problema de roteamento (como o tsp), que está usando uma matriz de distância euclidiana.Assumimos que alguns dos valores da matriz de distância nunca são usados, e alguns são usados ​​com muita frequência (portanto, não é uma boa ideia calculá-los dinamicamente para cada chamada).Agora parece ser razoável ter uma estrutura de dados preguiçosa mantendo os valores de distância.Como isso seria possível com a Phoenix?(ignorando o fato de que eu seria facilmente dispensado da programação no estilo fp) Ler a documentação oficial do Phoenix não me deixou entender o suficiente para responder a isso.

É possível de alguma forma?(em Haskell, por exemplo, a capacidade de criar conversões que garantem que o valor possa ser calculado posteriormente está no núcleo da linguagem).

O que significa usar um vetor com todas as funções preguiçosas definidas em Phoenix?Por mais ingênuo que sou, tentei preencher duas matrizes (vetor >) com valores aleatórios, uma com push_back normal, a outra com boost::phoenix::push_back e tentei ler apenas uma pequena quantidade de valores dessas matrizes e guarde-os em um recipiente para impressão.O preguiçoso estava sempre vazio.Estou usando o Phoenix de maneira errada/deveria ser possível?Ou entendi mal a função dos contêineres/algoritmos no Phoenix.Uma pequena pista para este último é a existência de uma estrutura de lista de dados especial na biblioteca FP++, que influenciou o Phoenix.

Adicionalmente:

  • Para que você está usando a fênix?
  • Você conhece alguns bons recursos sobre a Fênix?(tutoriais, entradas de blog...)

Obrigado por toda a sua contribuição!

Foi útil?

Solução

Conforme solicitado, meu comentário (com acréscimos e pequenas modificações) como resposta...

Eu sei exatamente a sua posição, eu também brinquei com Phoenix (embora não tenha me aprofundado muito, principalmente um subproduto da leitura do tutorial Boost::Spirit) há algum tempo, relativamente logo depois de detectar o bug funcional e aprender Haskell básico - e não consegui nada funcionar :( Isso está em sincronia com minha experiência geral com magia negra de modelos:Muito fácil de entender mal, errar e levar um soco na cara com um comportamento totalmente inesperado ou mensagens de erro incompreensíveis.

Aconselho você a ficar longe de Phoenix por um longo tempo.Eu também gosto de FP, mas FP em C++ é ainda mais feio que a mutabilidade em Haskell (eles estariam cara a cara, mas C++ já é feio e Haskell é, pelo menos de acordo com Larry Wall, a linguagem mais bonita de todos os tempos;)).Aprenda e use FP, e quando você for bom nisso e for forçado a usar C++, use Phoenix.Mas para a aprendizagem, uma biblioteca que estabeleça um paradigma totalmente diferente em uma linguagem já complexa (ou seja,FP em C++) não é aconselhável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top