2017-08-03 67 views
0

例如,我想将下列文件动态加载到我的程序中并打印出结果。如何在OCaml程序中动态评估一段OCaml代码?

input1.txt - >打印100

let x = 10 in x * x 

input2.txt - >打印3

let x = 1 and y = 2 in x + y 

input3.txt - >打印4

let ls = [1;2;3;4] in List.length ls 

ocaml_plugin可能对这个项目有用。我想知道如何实现它的更多细节。谢谢!

+0

你能解释一下你为什么要这样做吗? – Drup

+0

我正在构建我自己的运行时图计算器。基节点是一个OCaml表达式,例如,'a = let x = 100 in x * x'。节点可以是其他节点的公式,例如'b = a * a'。基节点可以采用任何自包含的OCaml表达式。基节点的输入发生变化后,所有依赖它的节点都将被重新评估。 –

回答

2

OCaml参考手册中的相关部分是dynlink library的一章(可以找到一个教程here)。 ocaml_plugin为这个库提供了一个包装并自动编译你的代码。

否则,您必须对您的.ml文件编译成.cmo文件与dynlink加载它们,无论是事前还是从程序调用编译器(或者,喜欢冒险,直接通过compiler front-end)前。

在你的例子中,似乎有一个通用模式(即一个函数不带参数并返回一个整数),并且可以定义一个接口。