在计划中浅平

时间:2013-02-21 11:04:15

标签: scheme

有一个“浅平”的功能吗? 我的意思是,像函数flatten一样,但是列表中每个表达式只有一个()

例如:

 (shallow flat '((1) (2) ( ( 4 5) 6)))

返回

'(1 2 (4 5) 6))

感谢

2 个答案:

答案 0 :(得分:3)

(apply append '((1) (2) ((4 5) 6)))   ;=> (1 2 (4 5) 6))
(apply append '((1) (2) (((4) 5) 6))) ;=> (1 2 ((4) 5) 6)

你可以把它变成一个程序,即:

(define (shallow-flatten lst)
  (apply append lst))

答案 1 :(得分:2)

正如Chris建议的那样,您可以使用SRFI 1的concatenate

(require srfi/1) ; import the library, this is Racket's syntax
(concatenate '((1) (2) ((4 5) 6)))

或者,在Racket中,您可以使用append*,检查解释器中是否有它可用:

(append* '((1) (2) ((4 5) 6)))

无论哪种方式,结果都符合预期,并且没有必要通过定义已有的过程重新发明轮子:

=> '(1 2 (4 5) 6)