是否可以在OCaml中执行编译时,类似于C++;模板元编程? 在C++中,递归模板和常量值作为模板参数允许做代码生成和编译时执行的有趣例子,例如.< /p>。

是否可以在OCaml中执行编译时,类似于C++;模板元编程? 在C++中,递归模板和常量值作为模板参数允许做代码生成和编译时执行的有趣例子,例如.< /p>。,ocaml,template-meta-programming,Ocaml,Template Meta Programming,是否可以在OCaml中使用参数多态性、函子或其他概念执行类似的操作?您可以在OCaml类型系统中执行算术;一个非常简单的例子出现在这个页面上 其他Stackoverflow页面: 我想您可以使用这个机制来计算类型系统中的阶乘。如果你使用标准的一元数(Peano)编码,一旦数字开始变大,结果会非常可怕。所以这只是一个有趣的特技 如果你想在类型级别上看到真正有趣的计算,你应该看看Haskell。一些常见的扩展(在GHC中可用)允许在类型系统中进行任意计算。即,类型系统是图灵完整的。ocaml干扰系

是否可以在OCaml中使用参数多态性、函子或其他概念执行类似的操作?

您可以在OCaml类型系统中执行算术;一个非常简单的例子出现在这个页面上 其他Stackoverflow页面:

我想您可以使用这个机制来计算类型系统中的阶乘。如果你使用标准的一元数(Peano)编码,一旦数字开始变大,结果会非常可怕。所以这只是一个有趣的特技


如果你想在类型级别上看到真正有趣的计算,你应该看看Haskell。一些常见的扩展(在GHC中可用)允许在类型系统中进行任意计算。即,类型系统是图灵完整的。

ocaml干扰系统使用统一。你可以认为它是一个计算设备,在这种情况下,它有一种逻辑编程的感觉。但是这种可能性是相当有限的,因为这从来不是类型系统的目标之一。正如您将在Jeffrey建议的页面中看到的,通过统一进行的类型级计算实际上相当有限(难以表达,例如乘法)。Haskell有一种更强大的约束语言,我不确定类型系统中的逻辑编程是否是一种好方法

OCaml类型系统的另一部分可以用其模块和函子语言进行类型级计算。函子允许以一种与形式编程语言Fω相联系的风格来表达类型级计算。您可能可以在模块语言的类型级别对教堂数字进行编码,但我不知道您可以用它做什么,因为以一种有用的、可利用的形式检索结果似乎相当困难。特别是,我不知道如何将类型信息转换成程序可用的值,因为C++或D使用它们的编译时常数计算。 是的,OCaml的类型系统(以及大多数函数式语言,也包括SML、Haskell和Scala)具有一定的计算能力,但不,我不希望用它们进行特别有用的预计算;这当然不是OCaml程序员的标准做法。类型最好被视为类型,它对它们所分类的值提供静态保证。

PG'Ocaml()例如,使用camlp4从数据库获取类型信息,然后执行sql查询的类型检查。