Bucles en LISP

Los bucles permiten ejecutar un conjunto de instrucciones repetidamente mientras alguna condición sea verdadera. LISP proporciona los siguientes tipos de bucles:

1. bucle dotimes:

El ciclo dotimes permite ejecutar instrucciones por un número fijo de veces.
Sintaxis: 

(dotimes( variableName numberOfIterations ) (
  expressions 
))

Dónde,

  • variableName => Nombre de la variable, esto se puede usar para obtener el número de iteración actual
  • numberOfIterations => Número total de iteraciones
  • expresiones => Sentencias a ejecutar en cada iteración

Ejemplo:

Lisp

(dotimes (a 4)
  (print a))
(write-line "")

Producción:

También puede regresar del bucle si se cumple una determinada condición

Lisp

(dotimes (i 7)
   (if (> i 5)
       (return)
       (print i))
    )
(write-line "")

Aquí, el ciclo está configurado para iterar 7 veces, sin embargo, cuando el valor supera los 5, el ciclo se detiene porque se cumple la condición. 
Producción:

2. bucle:

La construcción de bucle permite ejecutar algunas declaraciones repetidamente hasta que encuentra una declaración de retorno.

Sintaxis: 

( loop   
  (expressions)
  ( when (condition) (return returnValue))
)

Dónde,

  • expresiones => Sentencias a ejecutar en cada iteración
  • condition => Condición que especifica cuándo salir del bucle
  • returnValue => Valor a devolver

Ejemplo:

Lisp

(defvar n 3)
(loop
    (print n)
    (setq n (+ n 1))
    (when (> n 6) (return n))
)
(write-line "")

Aquí, n se imprime y se incrementa hasta que sea mayor que 6.
Salida:

3. bucle para:

El bucle for construct es similar a los bucles for en lenguajes populares como java, c++, etc. También se puede usar para recorrer listas y otras estructuras de datos.

Sintaxis:

( loop for variableName from startValue to endValue by changeValue do
   (expressions)
)

Dónde,

  • variableName => Nombre de la variable, esto se puede usar para obtener el valor de la variable en la iteración actual. 
  • startValue => Valor inicial de la variable
  • endValue => Valor final de la variable (después de la última iteración)
  • changeValue => Especifica cuánto aumentar o disminuir el valor después de cada iteración
  • expresiones => Sentencias a ejecutar en cada iteración

Ejemplo:

Lisp

; initialize x=12, execute instructions, 
; increment it by 3 and perform iteration until it is less than 25
(loop for x from 12 to 25 by 3 do
    (print x)
)
(write-line "")

Producción:

4. hacer:

La construcción do permite una forma estructurada de iteración.
Sintaxis:

(do ((variable_1    value_1   updated-value_1)
      (variable_2   value_2   updated-value_2)
      (variable_3   value_3   updated-value_3)
   ...)
   (test return_value)
   (s-expressions)
)

Dónde,

  • variable_1 => Primera variable
  • value_1 => Valor inicial para la primera variable
  • valor_actualizado_1 => Especifica cómo actualizar variable_1 después de cada iteración.
  • variable_2 => Segunda variable
  • value_2 => Valor inicial para la segunda variable
  • valor_actualizado_2 => Especifica cómo actualizar variable_2 después de cada iteración. … similar hasta variable_n
  • prueba => Condición que especifica cuándo detener el ciclo
  • valor de retorno => Valor que se devuelve al final de la iteración
  • expresiones => Otras sentencias a ejecutar en cada iteración

Los valores iniciales de cada variable se evalúan y vinculan a la variable respectiva. El valor actualizado en cada cláusula es con respecto a una declaración de actualización opcional que indica cómo actualizar las variables en cada iteración.
La prueba se realiza en cada iteración y si la expresión de prueba da como resultado un valor no nulo o verdadero, el valor devuelto se evalúa y se devuelve.
Si se especifican las últimas expresiones S opcionales, se ejecutan en cada iteración, mientras que los resultados de la expresión de prueba son verdaderos.
Ejemplo:

Lisp

(do ((a 0 (+ 2 a))
   (b 20 ( - b 2)))
   ((= a b)(- a b))
   (format t "~% a = ~d  b = ~d" a b)
)
(write-line "")

Producción:

5. dolista:

La construcción dolist proporciona una manera fácil de recorrer listas.

Sintaxis:

(dolist (listItemVariable list)
   (expressions)
) 

Dónde,

  • listItemVariable => Contiene el valor de cada elemento de la lista durante cada iteración
  • lista => Lista para recorrer
  • expresiones => Declaraciones a ejecutar en cada iteración

Ejemplo:

Lisp

(defvar nums `(9 5 2 3))
(dolist (item nums)
  (print item)
)
(write-line "")

Producción:

Referencias:

Publicación traducida automáticamente

Artículo escrito por omkarphansopkar 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 *