【发布时间】:2009-08-19 15:42:20
【问题描述】:
我正在评估面向计算的应用程序的语言,该应用程序需要为最终用户提供easy 嵌入式脚本语言。我一直在考虑使用 Scala 作为主要的底层语言,使用 Jython 作为脚本接口。 Scala 的一个吸引力在于,我可以定义诸如 :* 之类的方法用于矩阵对象的元素乘法,并将其与中缀语法 a :* b 一起使用。但是 :* 在 Python 中不是有效的方法名称。 Jython 如何处理这个问题?
由于它的灵活性,我会考虑使用 Scala 作为脚本语言。但即使使用类型推断,所有val 和var 以及所需的类型定义对于习惯于像matlab 这样的动态语言的外行用户来说都太多了。相比之下,Boo 的 -ducky 选项可能会起作用,但我想留在 JVM 而不是 .NET 上。我假设 Scala 没有 -ducky。
更一般地,考虑以下 DSL(来自http://www.cs.utah.edu/~hal/HBC/)来模拟潜在狄利克雷分配:
model {
alpha ~ Gam(0.1,1)
eta ~ Gam(0.1,1)
beta_{k} ~ DirSym(eta, V) , k \in [1,K]
theta_{d} ~ DirSym(alpha, K) , d \in [1,D]
z_{d,n} ~ Mult(theta_{d}) , d \in [1,D] , n \in [1,N_{d}]
w_{d,n} ~ Mult(beta_{z_{d,n}}) , d \in [1,D] , n \in [1,N_{d}]
}
result = model.simulate(1000)
对于熟悉分层贝叶斯建模的用户来说,这种语法非常棒(例如与 PyMCMC 相比)。 JVM 上是否有任何语言可以很容易地定义这样的语法,并且可以访问像 python 这样的基本脚本语言?
想法表示赞赏。
【问题讨论】:
-
在阅读了此处的讨论后,我修改了我的答案,建议使用您自己定制的 DSL 并对其进行解析...根据您的问题域,我认为这是最好的方法。跨度>