Secuencias en LISP

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *