相当于Haskell中的python eval

时间:2010-03-18 10:49:35

标签: python haskell metaprogramming eval

python中有一个名为eval的函数,它接受字符串输入并对其进行求值。

>>> x = 1
>>> print eval('x+1')
2
>>> print eval('12 + 32')
44
>>>  

什么是Haskell相当于eval函数?

5 个答案:

答案 0 :(得分:25)

确实,在Haskell中,如在Java或C ++或类似语言中,可以调用编译器,然后动态加载代码并执行它。但是,这通常很重,而且几乎不会让人们在其他语言中使用eval()

人们倾向于在语言中使用eval(),因为考虑到语言的设施,对于某些类别的问题,从类似于语言本身的程序输入构造字符串更容易,而不是解析和评估直接输入。

例如,如果您想允许用户不仅输入输入字段中的数字,而且输入简单的算术表达式,在Perl或Python中,只需在输入上调用eval()就可以了。为您想要允许的表达式语言编写解析器。不幸的是,这种方法几乎总是导致整体用户体验不佳(编译器错误消息不适用于非程序员)并打开安全漏洞。在不使用eval()的情况下解决这些问题通常需要相当多的代码。

在Haskell中,感谢Parsec之类的东西,为这些输入问题编写解析器和求值器实际上非常容易,并且大大消除了对eval的渴望。

答案 1 :(得分:12)

它没有内置的eval功能。但是有一些关于hackage that can do the same sort of thing的软件包。 (docs)。感谢@luqui,还有hint

答案 2 :(得分:10)

虽然Template Haskell允许编译时评估,但语言中没有内置'eval'。

对于运行时'eval' - 即运行时元编程 - Hackage上有许多包基本上导入GHC或GHCi,包括旧的hs-plugins包和提示包。

答案 3 :(得分:3)

答案 4 :(得分:1)

没有等效的eval,Haskell是一种静态编译的语言,与C或C ++相同,也没有eval。