这个答案更像是一个故事而不是一个全面的答案,但我在计算语言学的论文中使用了 Haskell、Python 和 C++ 的组合,以及我没有编写的几个 C 和 Java 工具。我发现将所有内容作为一个单独的进程运行最简单,使用 Python 作为胶水代码来启动 Haskell、C++ 和 Java 程序。
C++ 是一个相当简单、紧密的循环,可以计算特征的出现次数。基本上它所做的只是数学和简单的 I/O。我实际上是通过让 Python 胶水代码写出一个充满#define
s 的标头并重新编译来控制选项。有点hacky,但它有效。
Haskell 是所有中间处理:从我使用的各种 C 和 Java 解析器中获取复杂的输出,过滤无关数据,并将其转换为 C++ 代码所期望的简单格式。然后我将 C++ 输出转换为 LaTeX 标记(以及其他格式)。
这是您期望 Python 强大的领域,但我发现 Haskell 使复杂结构的操作更容易;Python 可能更适合于简单的行到行转换,但我正在对解析树进行切片和切块,发现在 Python 中编写代码时忘记了输入和输出类型。
因为我使用 Haskell 很像一种结构化的脚本语言,所以我最终编写了一些文件 I/O 实用程序,但除此之外,用于树和列表操作的内置库就足够了。
总之,如果您遇到像我这样的问题,我建议 C++ 用于内存受限、速度关键的部分,Haskell 用于高级转换,而 Python 来运行它。