Boolesche Werte in Clojure werden durch true oder false dargestellt.
Prädikatfunktionen (Funktionen, die einen booleschen Wert zurückgeben) enden üblicherweise mit einem Fragezeichen (?), aber das ist nur eine Konvention.
Die Kernbibliothek enthält Funktionen für logische Operatoren wie not, and und or.
In dieser Übung implementierst du die Quest-Logik für ein neues Rollenspiel, das ein Freund von dir entwickelt. Die Hauptfigur des Spiels ist Annalyn, ein tapferes Mädchen mit einem wilden und treuen Hund. Doch dann nimmt das Unheil seinen Lauf: Ihr bester Freund wurde entführt, während er im Wald Beeren suchte. Annalyn wird versuchen, ihren Freund zu finden und zu befreien. Auf dieser Quest kann sie ihren Hund mitnehmen, wenn sie möchte.
Nachdem sie eine Weile der Spur gefolgt ist, entdeckt Annalyn das Lager, in dem ihr Freund gefangen gehalten wird. Es stellt sich heraus, dass es zwei Entführer gibt: einen mächtigen Ritter und einen gerissenen Bogenschützen.
Nachdem Annalyn die Entführer gefunden hat, überlegt sie, welche der folgenden Aktionen sie ausführen kann:
Du hast vier Aufgaben: Implementiere die Logik, mit der sich bestimmen lässt, ob die oben genannten Aktionen verfügbar sind, und zwar abhängig vom Zustand der drei Figuren im Wald und davon, ob Annalyns Hund dabei ist oder nicht.
Implementiere die Funktion can-fast-attack?, die einen booleschen Wert entgegennimmt, der angibt, ob der Ritter wach ist.
Diese Funktion gibt true zurück, wenn ein schneller Angriff aufgrund des Zustands des Ritters möglich ist.
Andernfalls gibt sie false zurück:
(def knight-awake? true)
(can-fast-attack? knight-awake?)
;;=> false
Implementiere die Funktion can-spy?, die drei boolesche Werte entgegennimmt, die angeben, ob der Ritter, der Bogenschütze bzw. der Gefangene wach ist.
Die Funktion gibt true zurück, wenn die Gruppe aufgrund des Zustands der drei Figuren ausspioniert werden kann.
Andernfalls gibt sie false zurück:
(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true
Implementiere die Funktion can-signal-prisoner?, die zwei boolesche Werte entgegennimmt, die angeben, ob der Bogenschütze bzw. der Gefangene wach ist.
Die Funktion gibt true zurück, wenn der Gefangene aufgrund des Zustands der beiden Figuren signalisiert werden kann.
Andernfalls gibt sie false zurück:
(def archer-awake? false)
(def prisoner-awake? true)
(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true
Implementiere die Funktion can-free-prisoner?, die vier boolesche Werte entgegennimmt.
Die ersten drei Parameter geben an, ob der Ritter, der Bogenschütze bzw. der Gefangene wach ist.
Der letzte Parameter gibt an, ob Annalyns Hund dabei ist.
Die Funktion gibt true zurück, wenn der Gefangene befreit werden kann, und zwar abhängig vom Zustand der drei Figuren und davon, ob Annalyns Hund dabei ist.
Andernfalls gibt sie false zurück:
(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
Melde dich bei Exercism an, um Clojure mit 12 Konzepte105 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.