我刚刚发现了 Boost Phoenix 库(隐藏在 Spirit 项目中),作为函数式编程风格的粉丝(但仍然是业余爱好者;对 haskell 和 scheme 有一些小经验),我想玩弄这个库来学习关于这个库的合理应用。
除了使用 fp 样式增加代码的表达性和清晰度之外,我对以低成本加速计算的惰性求值特别感兴趣。
一个小而简单的例子如下:存在某种路由问题(如 tsp),它使用欧几里德距离矩阵。我们假设,距离矩阵的某些值从未使用过,而有些则经常使用(因此每次调用都动态计算它们不是一个好主意)。现在似乎有一个惰性数据结构来保存距离值是合理的。凤凰怎么可能?(忽略我完全不用 fp-style-programming 就可以轻松完成的事实)阅读 phoenix 的官方文档并没有让我理解到足以回答这个问题。
有可能吗?(例如,在 Haskell 中,创建 thunk 的能力可以保证以后可以计算该值是语言的核心)。
使用带有 phoenix 中定义的所有惰性函数的向量是什么意思?像我一样天真,我试图用随机值填充两个矩阵(向量>),一个用普通的 push_back,另一个用 boost::phoenix::push_back 并试图从这些矩阵中读出少量的值并将它们存储在容器中以供打印。懒惰的总是空的。我是否以错误的方式使用凤凰/应该有可能?还是我误解了phoenix中容器/算法的功能。后者的一个小线索是 FP++ 库中存在一个特殊的列表数据结构,它影响了 phoenix。
此外:
- 你用凤凰干什么?
- 你知道一些关于凤凰的好资源吗?(教程,博客条目...)
感谢您的输入!