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