在 Scheme 中,该eval函数只对符号列表进行操作,所以这可以正常工作:
(eval '(+ 1 2))
Run Code Online (Sandbox Code Playgroud)
但这会报错:
(eval "(+ 1 2)")
Run Code Online (Sandbox Code Playgroud)
要将 UI 中的字符串转换为符号列表(也称为 S 表达式),您需要调用该read函数。通常,read仅对“端口”(文件流)进行操作,因此您需要将字符串转换为输入端口,然后才能使用read:
(define (read-string text)
(read
(open-input-string text)))
Run Code Online (Sandbox Code Playgroud)
剩下的就是评估字符串,并调用你得到的 lambda 表达式:
(define (call-string text-lambda . args)
(apply
(eval (read-string text-lambda))
args))
Run Code Online (Sandbox Code Playgroud)
以下是您现在可以计算数字 3 的方法:
(call-string "(lambda (a b) (+ a b))" 1 2)
Run Code Online (Sandbox Code Playgroud)
您可以在R5RS和SRFI网站上找到适用于read和的 API 。open-input-string
| 归档时间: |
|
| 查看次数: |
986 次 |
| 最近记录: |