Tracks
/
Common Lisp
Common Lisp
/
Übungen
/
Lillys Lasagne
Lillys Lasagne

Lillys Lasagne

Lernübung

Einführung

Funktionen

Um in Common Lisp eine globale Funktion zu definieren, verwendet man den defun-Ausdruck. Dieser Ausdruck nimmt als erstes Argument eine Liste von Parametern entgegen (eine leere Liste bedeutet, dass die Funktion keine Parameter hat). Danach folgt ein optionaler Dokumentations-String (siehe unten) und anschließend null oder mehr Ausdrücke, die den „Rumpf“ der Funktion bilden.

Funktionen können null oder mehr Parameter haben.

(defun no-args () (+ 1 1))

(defun add-one (x) (1+ x))

(defun add-nums (x y) (+ x y))

Eine Funktion ruft man auf, indem man einen Ausdruck auswertet, dessen erstes Element das Symbol ist, das die Funktion bezeichnet, und dessen restliche Elemente die Argumente für die Funktion sind (falls es welche gibt).

Der Wert, zu dem eine Funktion auswertet, ist der Wert des letzten Ausdrucks im Rumpf der Funktion, der ausgewertet wurde. Alle Funktionen werten zu einem Wert aus.

(add-nums 2 2) ;; => 4

Funktionen können außerdem optional einen Dokumentations-String haben (auch „Docstring“ genannt). Wenn er angegeben wird, steht er nach der Argumentliste, aber vor dem Rumpf der Funktion. Auf den Dokumentations-String kann man über documentation zugreifen.

(defun add-nums (x y) "Add X and Y together" (+ x y))

(documentation 'add-nums 'function) ;; => "Add X and Y together"

;; Note that if one provides a docstring but fails to provide a body
;; then the docstring is interpreted by Common Lisp as the body, not
;; the docstring
(defun no-body ())
(no-body) ;; => NIL

(defun mistake () "This is not a docstring")
(mistake) ;; => "This is not a docstring"
(documentation 'mistake 'function) ;; => NIL

Anleitung

Lilly, das Lisp-Alien, ist zurück und kocht wieder! Diesmal bereitet Lilly eine Lisp-Alien-Lasagne zu, die einer menschlichen Lasagne nicht ganz unähnlich ist.

Lilly braucht ein paar Funktionen, mit denen sich die Backzeit der Lasagne bestimmen lässt. Und jede davon braucht eine gute Dokumentation, damit Lilly nicht vergisst, was sie tut.

Kannst du Lilly helfen, Funktionen zu schreiben, mit denen sich die Backzeit der Lasagne bestimmen lässt?

1. Definiere die erwartete Backzeit in Minuten

Definiere die Funktion expected-time-in-oven, die keine Parameter entgegennimmt und zurückgibt, wie viele Minuten die Lasagne im Ofen bleiben sollte. Nach der Tradition der Lisp-Aliens (genau wie Lillys Elterneinheit zu kochen pflegte) beträgt die erwartete Backzeit in Minuten 337:

(expected-time-in-oven) ;; => 337

2. Berechne die verbleibende Backzeit in Minuten

Definiere die Funktion remaining-minutes-in-oven, die die tatsächlichen Minuten, die die Lasagne bereits im Ofen war, als Parameter entgegennimmt und zurückgibt, wie viele Minuten die Lasagne noch im Ofen bleiben muss. Grundlage dafür ist die erwartete Backzeit in Minuten aus der vorherigen Aufgabe.

(remaining-minutes-in-oven 100) ;; => 237

3. Berechne die Vorbereitungszeit in Minuten

Definiere die Funktion preparation-time-in-minutes, die die Anzahl der Schichten, die Lilly zur Lasagne hinzugefügt hat, als Parameter entgegennimmt und zurückgibt, wie viele Minuten Lilly für die Vorbereitung der Lasagne gebraucht hat. Dabei dauert jede Schicht 19 Minuten.

(preparation-time-in-minutes 3) ;; => 57

4. Berechne die verstrichene Zeit in Minuten

Definiere die Funktion elapsed-time-in-minutes, die zwei Parameter entgegennimmt: Der erste Parameter ist die Anzahl der Schichten, die Lilly zur Lasagne hinzugefügt hat, und der zweite Parameter ist die Anzahl der Minuten, die die Lasagne bereits im Ofen war. Die Funktion soll zurückgeben, wie viele Minuten Lilly mit dem Kochen der Lasagne verbracht hat. Das ist die Summe aus der Vorbereitungszeit in Minuten und der Zeit in Minuten, die die Lasagne bis zu diesem Moment im Ofen verbracht hat.

(elapsed-time-in-minutes 3 100) ;; => 157
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Common Lisp Exercism

Bereit, mit Lillys Lasagne zu starten?

Melde dich bei Exercism an, um Common Lisp mit 27 Konzepte92 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.