2011-10-04 20 views
8

contras actualmente se comporta de esta manera:En Clojure, ¿cómo contras o conjuntar los elementos de una colección, pero no la colección en sí?

(cons '(1 2) '(3)) 
;=> ((1 2) 3) 

me gustaría lograr:

(magic-cons '(1 2) '(3)) 
;=> (1 2 3) 

no pude encontrar un recurso para esto todavía esto parece tan simple Siento que debería estar integrados en función.

O simplemente no sé escribir palabras para describir esta situación. De cualquier manera, házmelo saber. ¡Gracias!

Editar: Por favor, no responder con "aplanar": P es decir

(flatten (cons '(1 2) '(3))) 
+3

Solo para que usted pueda entender mejor 'contra'. 'contras significa" construcción ". Construye una lista que agrega nuevos elementos al comienzo de la lista, uno por uno. El tipo de función que está buscando debe agregar todos los elementos de una lista a otra o simplemente concatenar 2 listas. Por lo tanto, en Common Lisp se llama "append" y en Clojure, como ya se ha mencionado anteriormente, "concat". – ffriend

Respuesta

10

usted tiene que utilizar concat: uso

clojure.core/concat 
([] [x] [x y] [x y & zs]) 
    Returns a lazy seq representing the concatenation of the elements in the supplied colls. 

muestra:

user> (concat '(1 2) '(3)) 
(1 2 3) 
5

yo creo que busca concat (piensa "concatenar listas"):

[Concat ] devuelve un seq perezoso que representa la concatenación de los elementos en las columnas proporcionadas.

En este caso el uso sería:

(concat '(1 2) '(3))  

Nota que a diferencia de (muchos) otros LISP-dialectos, de Clojure concat produce una secuencia perezoso . Consulte How to covert a lazy sequence to a non-lazy in Clojure? para saber cómo "forzar" una secuencia (esto puede o no ser útil/necesario, dependiendo de un contexto más amplio, pero es importante tenerlo en cuenta).

Happy coding.

4

Una alternativa es "en".

en siempre devuelve el tipo del primer argumento, a diferencia de concat que siempre devuelve una lista.

=> (into [2 4] '(1 2 3)) 
[2 4 1 2 3] 

(into '(2 4) '(1 2 3)) 
(3 2 1 2 4) 
Cuestiones relacionadas