将字符串转换为Scheme中的代码

时间:2008-11-25 21:33:16

标签: lisp scheme

如何将字符串转换为PLT Scheme中的相应代码(不包含string->input-port方法)?例如,我想转换此字符串:

"(1 (0) 1 (0) 0)"

进入此列表:

'(1 (0) 1 (0) 0)

是否可以在不打开文件的情况下执行此操作?

4 个答案:

答案 0 :(得分:10)

Scheme具有用于从输入端口读取s表达式的过程read,您可以使用string->input-port将字符串转换为输入流。因此,您可以使用

从字符串中读取Scheme对象
(read (string->input-port "(1 (0) 1 (0) 0)"))

我没有安装Scheme,所以我只读它from reference并没有实际测试它。

答案 1 :(得分:5)

从PLT计划手册:

(open-input-string string [name-v])创建一个输入端口,从字符串的UTF-8编码(参见第1.2.3节)中读取字节。可选的name-v参数用作返回端口的名称;默认值为'string

答案 2 :(得分:2)

通过comp.lang.scheme上的类似问题,您可以将字符串保存到文件中,然后从中读取。

这可能类似于这个示例代码:

(let ((my-port (open-output-file "Foo")))
  (display "(1 (0) 1 (0) 0)" my-port)
  (close-output-port my-port))

(let* ((my-port (open-input-file "Foo"))
       (answer (read my-port)))
  (close-input-port my-port)
  answer)

答案 3 :(得分:1)

许多方案都with-input-from-string str thunkthunk是标准输入端口的上下文中执行str。例如在开局计划中:

(with-input-from-string "(foo bar)" (lambda () (read)))

评估为:

(foo bar)

lambda是必要的,因为thunk应该是一个不带参数的过程。