4

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

例如:

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

返回

'(1 2 (4 5) 6))

谢谢

4

2 回答 2

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))
于 2013-02-21T11:06:36.607 回答
2

正如克里斯建议的那样,您可以使用 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)
于 2013-02-21T13:46:17.493 回答