将原子分裂成列表lisp

问题描述 投票:-3回答:2

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

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

编辑:我当前正在使用通用Lisp。我有一个字符串列表(a3 d14 c2)等,但是我需要能够将它们中的每一个都分开,以分隔起始字母和继续进行的数字。

lisp
2个回答
0
投票

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

Atom

[..]被认为是指定系统的不可约组成部分。 [..]

我想这是麦卡锡命名Lisp原子时一直在想的定义。

因此,您试图实现的目标非常罕见,而不是一般情况下(常见或任何)Lisp的工作方式。通常,您将两个不同的原子(例如令牌和数字)分别表示为两个不同的原子,并将它们连接起来,例如使用缺点单元格:

(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可以得到符号的字符串表示形式,使用string可以(相反)获得相反的结果。在这两者之间,您可以随意操作字符串,包括将其拆分,将其转换为数字等。


0
投票

这可以在MACLISP和INTERLISP中实现。转换列表中的符号的功能在MACLISP中称为“爆炸”,在INTERLISP中称为“解压”。转换符号列表的函数在MACLISP中称为“内爆”,在INTERLISP中称为“打包”。如果您的系统具有GENSYM函数(一种用于创建符号的函数,因为将符号用作变量,则必须即时创建它们,特别是在宏编程中),它可能具有类似于'implode'和'爆炸'。

© www.soinside.com 2019 - 2024. All rights reserved.