lisp - 将原子拆分成列表 lisp

标签 lisp

如果我有一个原子,例如“a4”,我需要能够将 1 添加到“4”部分以使其成为 a5,但是因为它被认为是一个字符串,所以这是不可能的,所以如果我可以拆分 (a4 ) 到 ((a)(4)) 中,然后我可以对 4 进行计算,然后将它们重新组合在一起...

但是,我不确定如何将原子拆分为原子单词的列表?这可能吗?

编辑:我目前正在使用普通的 lisp。我有一个字符串列表 (a3 d14 c2) 等,但我需要能够将它们中的每一个分开,将起始字母和它后面的数字分开。

最佳答案

来自 http://www.thefreedictionary.com/atom

Atom

[..] A part [..] considered to be an irreducible constituent of a specified system. [..]

我猜想这个定义是 McCarthy 在命名 Lisp 的原子时一直在想的。

因此,您要实现的目标是极其罕见的,而不是事物在(通用或任何)Lisp 中的一般工作方式。通常,您将独立的数据(例如您的 token 和数字)表示为两个不同的原子并将它们连接起来,例如使用缺点单元格:

(defvar *data* (cons "answer" 42))
*data*
;; => ("answer" . 42)

如果您希望将其打印为 answer42,那么您必须打印它:

(format t "~a~a" (car *data*) (cdr *data*))

你想要的操作将是这样的:

(defun inc-number (cell)
  "Please give me a better name and describe here what I do"
  (cons (car cell)
        (inc (cdr cell))))

也就是说,当然可以实现你想要的:

使用 string您可以获得符号的字符串表示形式,使用 intern你可以(有点)达到相反的效果。在此期间,您可以随意操作字符串,包括拆分字符串、将其转换为数字等。

关于lisp - 将原子拆分成列表 lisp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052633/

相关文章:

lisp - 从 Lisp 中的递归返回 NIL

lisp - 获取列表中 elt 的 cdr

assembly - 了解 SBCL 进入/退出程序集样板代码

lisp - SBCL 中的 exp 是错误的?

lisp - 在 Linux 中安装 SBCL

emacs - 在 Emacs 中,这个错误是什么意思? "Warning: cl package required at runtime"

LISP 在局部函数中更改全局变量值

lisp - 如何调用引用的 lambda?

lisp - 检查 lisp 中是否存在关键字参数

lisp - 在 Common Lisp 中查找嵌套列表的平均值