一致的括号?

2 lisp recursion function

我想使用递归函数编写代码来取消LIST中的括号.

这是一个例子:

(unnest '(1 (2 (3)) (4 5))) ==> (1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)

Joã*_*lva 5

(defun unnest (lst)
  (cond ((null? lst) '())
        ((not (list? lst)) (list lst))
        (t
         (append (unnest (car lst))
                 (unnest (cdr lst))))))

> (unnest '(1 (2 (3)) (4 5))) 
(1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)

基本上这个想法如下:

  • 如果你有一个空列表,那么你显然不需要取消它;
  • 如果它不是列表,那么它必须是一个原子,因此你返回一个包含该原子的列表;
  • 在最后一个条件中,你有一个列表,所以你基本上说:unnested列表的结果是附加到列表其余部分的unnested版本的第一个元素的unnested版本,就是这样,递归负责休息.

希望能帮助到你.