Треки
/
Common Lisp
Common Lisp
/
Вправи
/
Лазанья Ліллі
Лазанья Ліллі

Лазанья Ліллі

Навчальна вправа

Вступ

Функції

Щоб визначити глобальну функцію в Common Lisp, ми використовуємо вираз defun. Першим аргументом цей вираз приймає список параметрів (порожній список означає, що функція не має параметрів). Далі йде необовʼязковий рядок тексту документації (англ. string), про який ідеться нижче, а потім нуль або більше виразів, які складають «тіло» функції.

Функції можуть мати нуль або більше параметрів.

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

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

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

Щоб викликати функцію, ми обчислюємо вираз, першим елементом якого є символ, що позначає функцію, а рештою елементів - аргументи функції (якщо вони є).

Результатом обчислення функції стає значення останнього обчисленого виразу в тілі функції. Усі функції обчислюються до якогось значення.

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

Функції також можуть мати, необовʼязково, рядок тексту документації (який ще називають «докстрінг»). Якщо його вказано, він іде після списку аргументів, але перед тілом функції. До рядка тексту документації можна дістатися через documentation.

(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

Вказівки

Ліллі, іншопланетянка з Ліспу, повернулася і знову готує! Цього разу вона створить лазанью іншопланетянки з Ліспу, яка не цілком несхожа на людську лазанью.

Ліллі знадобляться функції, які допоможуть визначити час приготування лазаньї. І кожна з них повинна мати добру документацію, щоб Ліллі не забула, що робить кожна з них.

Допоможімо Ліллі написати функції, які визначатимуть час приготування лазаньї?

1. Визначте очікуваний час у духовці у хвилинах

Визначте функцію expected-time-in-oven, яка не приймає жодних параметрів і повертає, скільки хвилин лазанья повинна перебувати в духовці. За традицією іншопланетян з Ліспу (так само, як готувала батьківська одиниця Ліллі), очікуваний час у духовці становить 337 хвилин:

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

2. Обчисліть час, що залишився в духовці, у хвилинах

Визначте функцію remaining-minutes-in-oven, яка приймає як параметр фактичну кількість хвилин, які лазанья вже провела в духовці, і повертає, скільки хвилин лазаньї ще потрібно залишатися в духовці, виходячи з очікуваного часу в духовці з попереднього завдання.

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

3. Обчисліть час на підготовку у хвилинах

Визначте функцію preparation-time-in-minutes, яка приймає як параметр кількість шарів, які Ліллі додала до лазаньї, і повертає, скільки хвилин Ліллі витратила на підготовку лазаньї, якщо припустити, що на кожен шар потрібно 19 хвилин.

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

4. Обчисліть витрачений час у хвилинах

Визначте функцію elapsed-time-in-minutes, яка приймає два параметри: перший параметр - це кількість шарів, які Ліллі додала до лазаньї, а другий параметр - кількість хвилин, які лазанья вже пробула в духовці. Функція повинна повернути, скільки хвилин Ліллі витратила на приготування лазаньї, тобто суму часу на підготовку у хвилинах і часу в хвилинах, який лазанья на цей момент провела в духовці.

(elapsed-time-in-minutes 3 100) ;; => 157
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Common Lisp Exercism

Час розпочати Лазанья Ліллі?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Common Lisp, а також 27 концепцій92 вправи та справжнє наставництво від людей, і все це безкоштовно.