gpt4 book ai didi

string - 将字符串转换为过程

转载 作者:行者123 更新时间:2023-12-02 01:19:16 25 4
gpt4 key购买 nike

我正在创建一个程序,允许用户引入 lambda 函数,只需将其写入界面编写框中,如下所示:

(lambda (p q) (and (not p) q))

这是结果“(lambda (p q) (and (not p) q))”,因为 schema 将其转换为字符串而不是可以计算的过程。

如何将此字符串转换为过程?

最佳答案

在Scheme中,eval函数仅对符号列表进行操作,因此这可以正常工作:

(eval '(+ 1 2))

但这会产生错误:

(eval "(+ 1 2)")

要将 UI 中的字符串转换为符号列表(也称为 S 表达式),您需要调用 read 函数。通常,read 仅在“端口”(文件流)上运行,因此您需要将字符串转换为输入端口,然后才能与 read 一起使用:

(define (read-string text)
(read
(open-input-string text)))

剩下的就是计算字符串,并调用结果得到的 lambda:

(define (call-string text-lambda . args)
(apply
(eval (read-string text-lambda))
args))

下面是计算数字 3 的方法:

(call-string "(lambda (a b) (+ a b))" 1 2)

您可以在 R5RS 找到用于 readopen-input-string 的 API。和 SRFI网站。

关于string - 将字符串转换为过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7170162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com