Os Boolean em Clojure são representados por true ou false.
As funções de predicado (funções que retornam um boolean) costumam terminar com um ponto de interrogação (?), mas isso é apenas uma convenção.
A biblioteca principal inclui funções para operadores lógicos como not, and e or.
Neste exercício, você vai implementar a lógica da missão de um novo jogo de RPG que um amigo está desenvolvendo. A personagem principal do jogo é Annalyn, uma garota corajosa que tem um cachorro de estimação, feroz e leal. Infelizmente, o desastre acontece: sua melhor amiga foi sequestrada enquanto procurava frutas silvestres na floresta. Annalyn vai tentar encontrar e resgatar sua amiga, podendo levar o cachorro com ela nessa missão.
Depois de algum tempo seguindo o rastro, Annalyn encontra o acampamento onde sua amiga está presa. Acontece que são dois sequestradores: um cavaleiro poderoso e um arqueiro astuto.
Depois de encontrar os sequestradores, Annalyn pensa em quais das ações a seguir ela pode realizar:
Você tem quatro tarefas: implementar a lógica para determinar se as ações acima estão disponíveis, com base no estado dos três personagens na floresta e na presença ou não do cachorro de estimação de Annalyn.
Implemente a função can-fast-attack? que recebe um valor booleano que indica se o cavaleiro está acordado.
Essa função retorna true se um ataque rápido puder ser feito com base no estado do cavaleiro.
Caso contrário, retorna false:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Implemente a função can-spy? que recebe três valores booleanos, indicando se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados.
A função retorna true se o grupo puder ser espionado, com base no estado dos três personagens.
Caso contrário, retorna false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Implemente a função can-signal-prisoner? que recebe dois valores booleanos, indicando se o arqueiro e o prisioneiro, respectivamente, estão acordados.
A função retorna true se for possível sinalizar para o prisioneiro, com base no estado dos dois personagens.
Caso contrário, retorna false:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Implemente a função can-free-prisoner? que recebe quatro valores booleanos.
Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respectivamente, estão acordados.
O último parâmetro indica se o cachorro de estimação de Annalyn está presente.
A função retorna true se for possível libertar o prisioneiro, com base no estado dos três personagens e na presença do cachorro de estimação de Annalyn.
Caso contrário, retorna 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
Crie sua conta no Exercism para aprender e dominar Clojure com 12 conceitos105 exercícios e mentoria humana de verdade, tudo de graça.