如何评估在F#中存储为字符串的表达式

Ada*_*ney 11 .net f#

我想做一些像这样的事情:

let x = 5
let y = 10

let expr = Console.ReadLine()

expr
Run Code Online (Sandbox Code Playgroud)

可以"x+y"在控制台中输入以存储在expr中的位置.

如何在F#中评估这样的声明?

最终,我希望用户能够在网页上输入表达式或系统规则,并将它们保存在数据库中,以便在适当的时间在F#库中应用.我只是不知道如何将输入的字符串转换为F#中的函数值.

感谢您提供的任何帮助!

亚当

小智 5

我刚刚看到 Joh 在他的F# 游戏开发页面上使用了报价评估

      open Microsoft.FSharp.Linq.QuotationEvaluation
      ...
      let mk_gravity scale_func (up: 'Vec): 'Vec =
      let q = <@ let (*) = %scale_func in -9.81 * up @>
      q.Eval()
Run Code Online (Sandbox Code Playgroud)

或者,如果您正在进行简单的数学计算,您可以从他的 codeplex plage - Symbolic Differentiation in C#/F#下载 Edmonodo 的表达式解析器和评估器

祝你好运 - Ji?í


nlu*_*oni 2

如前所述,F# 没有 eval,但如果您可以定义语法,则可以利用 F# 中的 Lex 和 Yacc 实现(fslex 和 fsyacc)。

编辑:

作为快速跟进,我知道在 ocaml 中,您可以使用ocamlmktop. 我不确定 F# 中是否有等效项。不过,这似乎与您想要的网络界面不符(对吗?)。