In Clojure i valori booleani sono rappresentati da true o false.
Le funzioni predicato (funzioni che restituiscono un valore booleano) di solito terminano con un punto interrogativo (?), ma questa è solo una convenzione.
La libreria core include funzioni per gli operatori logici come not, and e or.
In questo esercizio implementerai la logica della missione per un nuovo gioco di ruolo che sta sviluppando un tuo amico. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane da compagnia fiero e fedele. Purtroppo, arriva la catastrofe: il suo migliore amico è stato rapito mentre cercava le bacche nel bosco. Annalyn cercherà di trovarlo e salvarlo, con la possibilità di portare con sé il suo cane in questa missione.
Dopo aver seguito per un po' le tracce, Annalyn scopre l'accampamento in cui il suo amico è tenuto prigioniero. Scopre che i rapitori sono due: un possente cavaliere e un astuto arciere.
Dopo aver trovato i rapitori, Annalyn valuta quali delle seguenti azioni può intraprendere:
Hai quattro compiti: implementare la logica che determina se le azioni descritte sopra sono disponibili, in base allo stato dei tre personaggi che si trovano nel bosco e alla presenza o meno del cane di Annalyn.
Implementa la funzione can-fast-attack?, che riceve un valore booleano che indica se il cavaliere è sveglio.
La funzione restituisce true se si può sferrare un attacco rapido in base allo stato del cavaliere.
Altrimenti restituisce false:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Implementa la funzione can-spy?, che riceve tre valori booleani che indicano rispettivamente se il cavaliere, l'arciere e il prigioniero sono svegli.
La funzione restituisce true se il gruppo può essere spiato, in base allo stato dei tre personaggi.
Altrimenti restituisce false:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Implementa la funzione can-signal-prisoner?, che riceve due valori booleani che indicano rispettivamente se l'arciere e il prigioniero sono svegli.
La funzione restituisce true se si può segnalare al prigioniero, in base allo stato dei due personaggi.
Altrimenti restituisce false:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Implementa la funzione can-free-prisoner?, che riceve quattro valori booleani.
I primi tre parametri indicano rispettivamente se il cavaliere, l'arciere e il prigioniero sono svegli.
L'ultimo parametro indica se il cane di Annalyn è presente.
La funzione restituisce true se il prigioniero può essere liberato, in base allo stato dei tre personaggi e alla presenza del cane di Annalyn.
Altrimenti restituisce 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
Iscriviti a Exercism per imparare e padroneggiare Clojure con 12 concetti105 esercizi e il mentoring di persone reali, tutto gratis.