我开始学习 Lisp,我在书上找到了一段代码作为例子,但我不明白它是做什么用的。你能帮我理解吗?我不知道这样做是否合适。谢谢大家
(defun compress (l1)
(cond ((null (cdr l1)) '())
(t (accumula (car l1) 1 (cdr l1)))))
(defun accumula (val acc lst)
(cond ((null lst) (cons (comp-list val acc) nil))
((eq val (car lst)) (accumula val (1+ acc) (cdr lst)))
(t (cons (comp-list val acc) (accumula (car lst) 1 (cdr lst))))))
(defun comp-list (val acc)
(if (> acc 1) (list acc val) val))
最佳答案
这是Run Length Encoding的压缩函数多样性。
(compress '(3 3 4 3 3 2 1 1 1 1 0))
会产生
((2 3) 4 (2 3) 2 (4 1) 0)
其中每个子列表中的第一个数字是第二个数字在原始序列中重复的次数。
从示例中看起来不太像,但对于数字重复很多的长序列,您可以显着节省存储成本。
关于lisp - lisp代码的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467997/