Os Boolean em Clojure são representados por true ou false.
As funções de predicado (funções que devolvem um Boolean) costumam terminar com um ponto de interrogação (?), mas isto é apenas uma convenção.
A biblioteca principal inclui funções para operadores lógicos como not, and e or.
Neste exercício, vais implementar a lógica da missão de um novo jogo de RPG que um amigo teu está a desenvolver. A personagem principal do jogo é a Annalyn, uma rapariga corajosa com um cão de estimação feroz e leal. Infelizmente, o desastre bate à porta: a sua melhor amiga foi raptada enquanto procurava frutos silvestres na floresta. A Annalyn vai tentar encontrar e resgatar a sua amiga, podendo levar o cão com ela nesta missão.
Depois de algum tempo a seguir o rasto, a Annalyn encontra o acampamento onde a sua amiga está presa. Acontece que há dois raptores: um cavaleiro poderoso e um arqueiro astuto.
Depois de encontrar os raptores, a Annalyn pensa em qual das seguintes ações pode fazer:
Tens quatro tarefas: implementar a lógica que determina se as ações acima estão disponíveis, com base no estado das três personagens na floresta e na presença ou não do cão da Annalyn.
Implementa a função can-fast-attack?, que recebe um valor Boolean que indica se o cavaleiro está acordado. A função devolve true se for possível fazer um ataque rápido, com base no estado do cavaleiro. Caso contrário, devolve false:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Implementa a função can-spy?, que recebe três valores Boolean que indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se for possível espiar o grupo, com base no estado das três personagens. Caso contrário, devolve false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Implementa a função can-signal-prisoner?, que recebe dois valores Boolean que indicam se o arqueiro e o prisioneiro, respetivamente, estão acordados. A função devolve true se for possível sinalizar o prisioneiro, com base no estado das duas personagens. Caso contrário, devolve false:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Implementa a função can-free-prisoner?, que recebe quatro valores Boolean. Os três primeiros parâmetros indicam se o cavaleiro, o arqueiro e o prisioneiro, respetivamente, estão acordados. O último parâmetro indica se o cão da Annalyn está presente. A função devolve true se for possível libertar o prisioneiro, com base no estado das três personagens e na presença do cão da Annalyn. Caso contrário, devolve 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
Inscreve-te no Exercism para aprenderes e dominares Clojure com 12 conceitos105 exercícios, e mentoria humana real, tudo grátis.