将原子分成列表lisp

时间:2015-12-02 20:45:06

标签: lisp

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

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

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

2 个答案:

答案 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