Los valores booleanos en Clojure se representan con true o false.
Las funciones predicado (aquellas que devuelven un Boolean) suelen terminar con un signo de interrogación (?), aunque esto es solo una convención.
La biblioteca principal incluye funciones para operadores lógicos como not, and y or.
En este ejercicio, vas a implementar la lógica de la misión de un nuevo juego de rol que está desarrollando un amigo. La protagonista del juego es Annalyn, una chica valiente con un perro feroz y leal. Por desgracia, la tragedia llama a su puerta: su mejor amiga ha sido secuestrada mientras buscaba bayas en el bosque. Annalyn intentará encontrar y liberar a su amiga, y puede que se lleve a su perro con ella en esta misión.
Tras pasar un tiempo siguiendo el rastro, Annalyn encuentra el campamento en el que está prisionera su amiga. Resulta que hay dos secuestradores: un caballero poderoso y un arquero astuto.
Una vez encontrados los secuestradores, Annalyn se plantea cuál de las siguientes acciones puede llevar a cabo:
Tienes cuatro tareas: implementar la lógica para determinar si las acciones anteriores están disponibles según el estado de los tres personajes que se encuentran en el bosque y según si el perro de Annalyn está presente o no.
Implementa la función can-fast-attack?, que recibe un valor booleano que indica si el caballero está despierto.
Esta función devuelve true si se puede hacer un ataque rápido según el estado del caballero.
De lo contrario, devuelve false:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Implementa la función can-spy?, que recibe tres valores booleanos que indican si el caballero, el arquero y el prisionero, respectivamente, están despiertos.
La función devuelve true si se puede espiar al grupo, según el estado de los tres personajes.
De lo contrario, devuelve false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Implementa la función can-signal-prisoner?, que recibe dos valores booleanos que indican si el arquero y el prisionero, respectivamente, están despiertos.
La función devuelve true si se puede enviar una señal al prisionero, según el estado de los dos personajes.
De lo contrario, devuelve false:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Implementa la función can-free-prisoner?, que recibe cuatro valores booleanos.
Los tres primeros parámetros indican si el caballero, el arquero y el prisionero, respectivamente, están despiertos.
El último parámetro indica si el perro de Annalyn está presente.
La función devuelve true si se puede liberar al prisionero según el estado de los tres personajes y la presencia del perro de Annalyn.
De lo contrario, devuelve false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)
(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Regístrate en Exercism para aprender y dominar Clojure con 12 conceptos105 ejercicios y mentoría humana real, todo gratis.