我想了解如何让eval函数读取一个字符串并计算其中的内容。
目前我知道
> (eval '(+ 1 2))
3
但我对 racket 的使用并不是很了解。所以目前我正在尝试做到这一点:
> (eval "(+ 1 2)")
3
任何建议或有用资源的链接都将不胜感激。目前我知道
> (eval '(+ 1 2))
3
但我对 racket 的使用并不是很了解。所以目前我正在尝试做到这一点:
> (eval "(+ 1 2)")
3
任何建议或有用资源的链接都将不胜感激。open-input-string
和 read
进行协作。像这样:
-> (eval (read (open-input-string "(+ 1 2)")))
3
您还可以使用with-input-from-string
:
-> (with-input-from-string "(+ 1 2)"
(lambda () (eval (read))))
3
(eval (call-with-input-string "(+ 1 2)" read))
。为什么呢?1.在eval
之前,字符串端口会自动关闭(不像open-input-string
的解决方案;好吧,对于字符串端口,这可能并不太重要(除非你使用的是Guile ;-)), 但还是存在这个问题); 2.它不使用fluids/parameters(不像with-input-from-string
的解决方案)。 - C. K. Youngeval
的例子,请随时发布,我会告诉您。 :-D - C. K. Young