如果我有一个原子,例如“a4”,我需要能够在“4”部分加1,使其成为a5,但是因为它被认为是一个字符串,这是不可能的,所以如果我可以分裂(a4进入((a)(4))然后我可以对4进行计算然后再将它们粘在一起......
但是,我不确定如何将原子分成原子词的列表?这可能吗?
编辑:我目前正在使用常见的lisp。我有一个字符串列表(a3 d14 c2)等,但我需要能够将它们分开,将起始字母和开头字母分开。
答案 0 :(得分:0)
来自http://www.thefreedictionary.com/atom
原子
[..]部分[..]被认为是指定系统的不可简化的组成部分。 [..]
我猜这个定义是麦卡锡在命名Lisp原子时一直在想的。
因此,您正在尝试实现的目标非常罕见,而不是通常的工作方式(Common或任何)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
,您可以获得符号的字符串表示,intern
可以(有点)实现相反的结果。在中间,您可以根据需要操纵字符串,包括拆分,将其转换为数字等等。
答案 1 :(得分:0)
这可以在MACLISP和INTERLISP中实现。转换列表中的符号的功能在MACLISP中称为“爆炸”,在INTERLISP中称为“解压”。转换符号列表的函数在MACLISP中称为“内爆”,在INTERLISP中称为“打包”。如果您的系统具有GENSYM功能-一种用于创建符号的功能,因为将符号用作变量,则必须即时创建它们,特别是在宏编程中-它可能具有类似于'implode'和'爆炸”。
如果您使用通用Lisp,则此Google网上论坛讨论提供了“爆破”和“爆炸”的实现:https://groups.google.com/forum/#!topic/comp.lang.lisp/SXhf78kCI7Q