Il tipo Bool è uno dei mattoni fondamentali del linguaggio.
Serve a descrivere se qualcosa è vero o falso, con i rispettivi valori True e False.
I booleani possono essere combinati con gli operatori && «AND» e || «OR», e negati con la funzione not.
I booleani sono anche estremamente utili per creare rami nel codice che vengono eseguiti solo se determinate condizioni sono soddisfatte.
In Elm, questo si fa con un'espressione if-then-else, usata come segue.
if someCondition || (someOtherCondition && anotherCondition) then
doSomething
else
doSomethingElse
In questo esercizio implementerai la logica delle missioni per un nuovo gioco di ruolo che sta sviluppando un amico. La protagonista del gioco è Annalyn, una ragazza coraggiosa con un cane feroce e fedele. Purtroppo arriva la catastrofe: la sua migliore amica è stata rapita mentre cercava bacche nel bosco. Annalyn cercherà di trovare e liberare la sua migliore amica, portando con sé il cane, se vuole, in questa missione.
Dopo aver seguito per un po' le tracce della sua migliore amica, trova l'accampamento in cui è imprigionata. Si scopre che i rapitori sono due: un cavaliere possente ed un arciere astuto.
Una volta trovati i rapitori, Annalyn valuta quali delle seguenti azioni può intraprendere:
Hai cinque compiti: implementare la logica che determina se le azioni precedenti sono disponibili, in base allo stato dei tre personaggi trovati nel bosco e alla presenza o meno del cane di Annalyn.
Implementa la funzione canFastAttack, che prende 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:
knightIsAwake = True
canFastAttack knightIsAwake
--> False
Implementa la funzione canSpy, che prende tre valori booleani che indicano rispettivamente se il cavaliere, l'arciere ed il prigioniero sono svegli. La funzione restituisce True se si può spiare il gruppo, in base allo stato dei tre personaggi. Altrimenti restituisce False:
knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
canSpy knightIsAwake archerIsAwake prisonerIsAwake
--> True
Implementa la funzione canSignalPrisoner, che prende due valori booleani che indicano rispettivamente se l'arciere ed il prigioniero sono svegli. La funzione restituisce True se si può segnalare il prigioniero, in base allo stato dei due personaggi. Altrimenti restituisce False:
archerIsAwake = False
prisonerIsAwake = True
canSignalPrisoner archerIsAwake prisonerIsAwake
--> True
Implementa la funzione canFreePrisoner, che prende quattro valori booleani. I primi tre parametri indicano rispettivamente se il cavaliere, l'arciere ed il prigioniero sono svegli. L'ultimo parametro indica se il cane di Annalyn è presente. La funzione restituisce True se si può liberare il prigioniero, in base allo stato dei tre personaggi e alla presenza del cane di Annalyn. Altrimenti restituisce False:
knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False
canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
--> False
Implementa la funzione stealthAttackDamage, che prende un valore booleano che indica se Annalyn è stata individuata. La funzione restituisce 7 se è stata individuata, 12 altrimenti.
annalynIsDetected = True
stealthAttackDamage annalynIsDetected
--> 7
Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.