string - 从字符串中读取 Lisp 对象

标签 string common-lisp

我熟悉从文件中收集 Lisp 对象的基本模板,如下所示:

(with-open-file (stream "filename.lisp")
    (loop for object = (read stream nil 'eof)
          until (eq object 'eof)
          collect object))

但我不确定如何将其转换为从字符串中收集对象,例如使用read-from-string。那么您是否必须跟踪字符串中停止位置的索引?另外,如何避免与输入中的 eof 或任何其他合法 Lisp 对象(例如 nilt)发生名称冲突?

最佳答案

您可以使用with-input-from-string从字符串中读取。

为了防止与 eof 符号发生冲突,您可以使用未驻留的符号或动态创建的其他对象。

(with-input-from-string (stream "this is a (list of 3 things)")
  (loop with eof-marker = '#:eof
        for object = (read stream nil eof-marker)
        until (eq object eof-marker)
        collect object))

关于string - 从字符串中读取 Lisp 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867749/

相关文章:

c - 尝试使用 strtok 和 malloc 但一直出错,我看不到错误消息

python - 如何测试字符串是否以大写字母开头?

lisp - 来自 Google Common Lisp 风格指南 : "Avoid modifying local variables, try rebinding instead" meaning?

common-lisp - 无差别地循环遍历数组或列表

javascript - 将数字转换为十进制,将数字替换为 JavaScript 中的 12 个字母之一

c# - 检查 Uppercase 函数是否有效

c - 检测到 glibc,realloc() : invalid old size C

macros - 在通用 lisp 宏中扩展参数列表

lisp - 不会减少给定的值(value)

common-lisp - 如何将实例 "cast"指向子类?