如何在球拍中评估字符串

Raz*_*zed 9 string eval racket

我试图了解如何让eval函数读取字符串并评估字符串中的内容.

目前我知道

> (eval '(+ 1 2))
   3
Run Code Online (Sandbox Code Playgroud)

但是我对球拍的使用知之甚少.所以目前我正试图让它能够做到这一点:

> (eval "(+ 1 2)")
   3
Run Code Online (Sandbox Code Playgroud)

任何建议或有用资源的链接将不胜感激.

Sam*_*adt 17

你想和... read一起使用open-input-string.像这样:

-> (eval (read (open-input-string "(+ 1 2)")))
3
Run Code Online (Sandbox Code Playgroud)

您还可以使用with-input-from-string:

-> (with-input-from-string "(+ 1 2)"
     (lambda () (eval (read))))
3
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢使用`(eval(call-with-input-string"(+ 1 2)"read))`.为什么?1.字符串端口在`eval`之前自动关闭(与`open-input-string`解决方案不同;好吧,对于字符串端口,它可能没关系太多(除非你使用Guile ;-)) ,但仍然); 2.它不使用流体/参数(与`with-input-from-string`解决方案不同). (9认同)