我想做类似于这样的事情:
let x = 5
let y = 10
let expr = Console.ReadLine()
expr
在控制台中,如果要将 "x+y"
存储在表达式中,应该在哪里输入?
在 F# 中,如何评估这样的语句?
最终,我希望用户能够在网页上输入表达式或系统的一组规则,并将它们保存在数据库中以便在 F# 库中适当的时候应用它们。 我只是不知道如何将输入的字符串转换为 F# 的函数值。
感谢您提供的任何帮助!
Adam
我刚看到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()
如果您只需要进行简单的数学计算,可以从Edmonodo的CodePlex页面下载他的表达式解析器和求值器 - C#/F#中的符号微分
祝好运- Jiří
F#没有eval,如上所述,但是如果您可以定义语法,您可以利用F#中的Lex和Yacc实现(fslex和fsyacc)。
编辑:
作为快速跟进,我知道在ocaml中,您可以使用ocamlmktop
将交互式控制台暴露给用户。我不确定F#中是否有相当的功能。尽管如此,这似乎与您想要的Web界面不符(正确吗?)。
这方面没有现成的解决方案。
我不确定你的需求是什么,但你可以考虑动态LINQ示例。它有一个小解析器来生成表达式树,你可以编译或操作它们。ScottGu在这里谈到了它here。
尽管它看起来主要是为扩展LINQ查询而设计的,但它也作为一个好的解析器。我们对它进行了一些修改,以支持do/let绑定,以获得更多的灵活性。
F#没有像Lisp那样的eval函数(据我所知),如果你想知道的话。不过,你可以根据字符串输入自己构建一个表达式树。