我想做一些像这样的事情:
let x = 5
let y = 10
let expr = Console.ReadLine()
expr
可以在控制台中键入"x+y"
以存储在expr中。
如何在F#中评估这样的语句?
最终,我希望用户能够在网页上输入表达式或系统规则,并将它们保存在数据库中,以便在适当的时间在F#库中应用。我只是不知道如何将输入的字符串转换为F#中的函数值。
感谢您提供的任何帮助!
亚当
答案 0 :(得分:4)
我刚看到约翰使用他的报价评估 F# for game development page
open Microsoft.FSharp.Linq.QuotationEvaluation
...
let mk_gravity scale_func (up: 'Vec): 'Vec =
let q = <@ let (*) = %scale_func in -9.81 * up @>
q.Eval()
或者,如果您正在进行简单的数学评估,您可以从他的Codeplex plage下载Edmonodo的Expression解析器和评估器 - Symbolic Differentiation in C#/F#
祝你好运 - Jiří答案 1 :(得分:2)
如上所述,F#没有eval,但是如果你可以定义语法,你可以利用F#中的Lex和Yacc实现(fslex和fsyacc)。
编辑:
作为快速跟进,我知道您可以通过ocamlmktop
将交互式控制台用于您的用户。我不确定F#中的等价物。但是,这似乎与您想要的Web界面不匹配(正确吗?)。
答案 2 :(得分:0)
F#没有像Lisp(AFAIK)这样的评估函数,如果那是你想知道的。您可以根据字符串输入自己构建表达式树。
答案 3 :(得分:0)
没有任何开箱即用的东西。
我不确定您的需求是什么,但您可能会考虑动态LINQ示例。它有一个小的解析器来生成表达式树,然后您可以编译或操作它们。 ScottGu谈到它here。
虽然它看起来主要用于扩展LINQ查询,但它充当了一个很好的解析器。我们将其破解为支持do / let绑定以获得更大的灵活性。
答案 4 :(得分:0)
或者您可以查看实现数学表达式求值程序的my F# code。