En Lisp, el conjunto ordenado de elementos se representa mediante secuencias. Toda la funcionalidad que usamos en secuencias se aplica en vectores y listas que son dos de los subtipos de secuencias.
Crear una secuencia:
La función genérica para crear una Secuencia en Lisp es:
;La función genérica para crear una Secuencia en Lisp make-sequence type size &key:default-element
Nota:
In the above syntax, type represents the type of sequence and size represents the size of the sequence. The :default-element sets all the elements in the sequence initialised to the given value
Ejemplo 1:
Lisp
; Creating a vector of size 6 with 2 ; as the default element of type fixnum or integer (write (make-sequence '(vector fixnum) 6 :initial-element 2))
Producción:
Funciones genéricas en secuencias:
En Lisp, tenemos muchas funciones genéricas que se pueden aplicar a vectores y listas.
S. No. | Función | Descripción |
---|---|---|
1 | elt | Proporciona acceso a elementos individuales a través de un índice entero. |
2 | longitud | Encuentra la longitud de la secuencia. |
3 | llenar | Se utiliza para establecer múltiples elementos en un solo valor |
4 | copiar-seq | Devuelve una secuencia que contiene los mismos elementos que su argumento. |
5 | subsiguiente | Devuelve una subsecuencia de un índice a otro o el final de la secuencia. |
6 | contar | Devuelve el número de veces que aparece un elemento en una secuencia. |
7 | reverso | Devuelve una secuencia que contiene elementos de una secuencia en orden inverso. |
8 | reemplazar | Consta de dos secuencias en las que los elementos de la segunda secuencia se copian en la primera. |
9 | concatenar | Crea una nueva secuencia que contiene una concatenación de dos o más secuencias. |
10 | inversa | Devuelve la misma secuencia con el elemento en orden inverso. |
11 | clasificar | Devuelve una secuencia ordenada con un predicado de dos órdenes, |
12 | encontrar | Encuentra un elemento en una secuencia si el elemento no se encuentra, luego devuelve cero. |
13 | posición | Encuentra y devuelve el índice de un elemento en una secuencia, si no está presente, devuelve nil. |
14 | alguno | Toma un predicado como argumento e itera sobre la secuencia, encuentra el primer argumento no nulo y lo devuelve, si el predicado no se satisface en absoluto, devuelve falso. |
15 | mapa | Toma una función y varias secuencias y devuelve una nueva secuencia que contiene el resultado después de aplicar la función a los elementos posteriores de todas las secuencias. |
dieciséis | unir | Fusiona las secuencias según el predicado. |
17 | cada | Toma un predicado como argumento y devuelve verdadero si el predicado siempre se cumple; de lo contrario, devuelve falso. |
18 | no cualquiera | Devuelve verdadero si el predicado pasado nunca se satisface; de lo contrario, devuelve falso. |
19 | nota cada | Devuelve verdadero si algunos de los elementos de la secuencia no satisfacen el predicado, si todos satisfacen, devuelve falso. |
20 | reducir | Reduce la longitud de una secuencia en 1 unidad aplicando una función de 2 argumentos en los dos primeros elementos, el valor obtenido se devuelve junto con los elementos posteriores. |
21 | búsqueda | Busca elementos en una secuencia que satisfagan una condición o prueba. |
22 | retirar | Elimina todas las instancias de un elemento de una secuencia, la instancia y la secuencia se pasan como parámetros. |
23 | Eliminar | Elimina todas las instancias de un elemento de una secuencia, la instancia y la secuencia se pasan como parámetros. |
24 | discordancia | Toma dos secuencias y devuelve el primer índice donde los elementos de las dos secuencias no coinciden. |
25 | sustituir | Toma un elemento nuevo y un elemento existente como argumentos y devuelve la misma secuencia donde el elemento nuevo reemplaza al elemento anterior. |
26 | sustituto | Toma un elemento nuevo y un elemento existente como argumentos y devuelve una secuencia en la que el elemento nuevo reemplaza al elemento anterior. |
Argumentos de palabra clave de función de secuencia estándar:
S. No. | Argumento | Sentido | Valor por defecto |
---|---|---|---|
1 | :llave |
Es una función de un argumento que extrae el valor clave de los elementos de la secuencia. NIL es una indicación para usar el elemento tal cual. |
NULO |
2 | :prueba | Una función de dos argumentos que se utiliza para comparar los elementos. |
EQL |
3 | :comienzo | Índice inicial (inclusivo) de una secuencia |
0 |
4 | :contar | El número indica el número de elementos a eliminar o sustituir, mientras que NIL indica todos |
NULO |
5 | :desde el final | Si es cierto, la secuencia se recorre en orden inverso. |
NULO |
6 | :final | Índice final (exclusivo) de la secuencia. NIL representa el final de la secuencia |
NULO |
Ya que ahora estamos familiarizados con las funciones de secuencia genérica y estándar, implementémoslas en algunos ejemplos.
Encontrar longitud y elemento en secuencias:
Como discutimos las funciones genéricas, podemos encontrar fácilmente la longitud y un elemento particular en una secuencia. Recuerde que se usó length para encontrar la longitud, mientras que usaremos la función elt para encontrar un elemento en particular.
Ejemplo 2:
Lisp
; Finding the length of a vector and element at a index (setq x (vector 'kishan 'rohan 'vishal 'sarthak)) (write (length x)) (terpri) (write (elt x 3))
Producción:
Nota:
Indexing in Lisp is also zero-based.
Modificando Secuencias en Lisp:
Para realizar cualquier modificación en una secuencia tenemos algunas funciones predefinidas para eliminar, contar, buscar y filtrar.
Ejemplo 3:
Lisp
; Sequence Modification Functions (write (count 8 '(2 8 8 8 8 3 8 1 6 8 9))) (terpri) (write (remove 5 '(1 5 6 7 4 5))) (terpri) (write (substitute 0 9 '(1 5 6 7 8 9 2 7 3 4 5))) (terpri) (write (find 6 '(1 5 6 7 8 2 9 5))) (terpri) (write (position 9 '(1 7 5 6 8 9 5)))
Producción:
Además, podemos hacer una modificación condicional, es decir, podemos poner algunas condiciones y realizar operaciones en la lista.
Ejemplo 4:
Lisp
; Conditional Modification (write (delete-if #'oddp '(1 2 3 4 5 6))) (terpri) (write (delete-if #'evenp '(1 2 3 4 5 6))) (terpri) (write (remove-if #'evenp '(1 2 3 4 5 6) :count 2 :from-end t)) (terpri) (setq x (vector 'apple 'apple 'apple 'guava)) (fill x 'mango :start 0 :end 2) (write x)
Producción:
Clasificación y fusión de secuencias en Lisp:
Lisp nos proporciona operaciones con las que podemos ordenar una secuencia y también podemos fusionar secuencias. Las funciones sort y merge realizan las operaciones respectivamente.
- Secuencias de clasificación: para clasificar, usamos la función de clasificación, el orden se proporciona después de la lista para clasificar de alguna manera específica.
Ejemplo 5:
Lisp
; Sorting Sequences ; A) Ascending Order (write (sort '(8 7 6 5 3 4 1 2) #'<)) (terpri) ; B) Descending Order (write (sort '(1 2 3 4 6 5 7 9 8) #'>)) (terpri)
Producción:
- Secuencias fusionadas: para fusionar secuencias usamos la función de fusión, el orden se proporciona después de la lista para fusionarlas de alguna manera específica.
Ejemplo 6:
Lisp
; Merging Sequences ; A) Merging Vectors (write (merge 'vector #(1 3 5) #(2 4 6) #'<)) (terpri) ; B) Merging Lists (write (merge 'list #(1 3 5) #(2 4 6) #'<)) (terpri)
Producción:
- Predicados de secuencia: estas son las funciones que iteran sobre la secuencia y prueban los predicados booleanos. Por tanto, el primer argumento es siempre un predicado para ellos, mientras que los argumentos restantes son secuencias. Devuelven T (verdadero) sino nil (falso). Ejemplos: todos, algunos, no muchos y no todos.
- cada: Devuelve verdadero si todos los elementos siguen la condición o no.
- some: Devuelve verdadero si algunos elementos siguen la condición o no.
- not any: Devuelve verdadero si ningún elemento sigue la condición.
- no todos: Devuelve verdadero si algún elemento no sigue la condición.
Ejemplo 7:
Lisp
;Sequence Predicates in Lisp (write (some #'evenp #(2 4 6 7))) (terpri) (write (every #'evenp #(2 4 6 8 10 13 14))) (terpri) (write (notany #'evenp #(2 4 6 8 10))) (terpri) (write (notevery #'evenp #(2 4 6 8 10 13))) (terpri)
Producción:
- Mapeo de Secuencias: En Lisp, tenemos la función map que nos proporciona la funcionalidad con la que podemos aplicar algunas operaciones en múltiples secuencias y devolver una sola secuencia nueva.
Ejemplo 9:
Lisp
;Map function on two different sequences (write (map 'vector #'+ #(1 2 3 9) #(5 6 7 10)))
Producción:
Publicación traducida automáticamente
Artículo escrito por kishanpandeyrkt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA