Треки
/
Clojure
Clojure
/
Вправи
/
Смачнюща лазанья Люсіана
Смачнюща лазанья Люсіана

Смачнюща лазанья Люсіана

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

Вступ

У Clojure привʼязування значення до імені називають змінною. Змінні верхнього рівня (глобальні) схожі на константи в інших мовах.

Змінні верхнього рівня визначають за допомогою def:

(def fingers 10)

fingers
;;=> 10

Макрос defn можна використати, щоб визначити функцію, яка приймає нуль або більше аргументів. Ось функція, яка додає 2 числа разом:

(defn add [x y]
  (+ x y))

Ця функція приймає 2 аргументи, які розміщено у векторі [x y], а далі йде тіло функції, яке може містити будь-яку кількість виразів. Повернене значення завжди є результатом обчислення останнього виразу в тілі, (+ x y). Цей вираз є списком, що представляє виклик функції. Першим елементом списку є функція +, яку обчислюють, використовуючи наступні елементи x і y як аргументи.

Функцію add, визначену вище, викликають так само:

(add 2 3)
;;=> 5

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

У Clojure пробільні символи не мають жодного значення, крім форматування.

Функції та змінні в Clojure організовано в простори імен. Простір імен обʼєднує споріднену функціональність і визначається за допомогою макросу ns:

(ns calculator)

(def pi 3.14)

(defn add [x y]
  (+ x y))

Clojure підтримує два типи коментарів. Однорядкові коментарі починаються з ;, а форму comment використовують, щоб запобігти обчисленню всього між (comment і ).

Вказівки

У цій вправі ми напишемо трохи коду, який допоможе приготувати чудову лазанью з нашої улюбленої кулінарної книги.

На нас чекають чотири завдання, і всі вони повʼязані з часом, витраченим на приготування лазаньї.

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

Визначте змінну expected-time, щоб дізнатися, скільки хвилин лазанья має провести в печі. Згідно з кулінарною книгою, очікуваний час у печі становить 40 хвилин:

expected-time
;;=> 40

2. Обчисліть залишок часу в печі в хвилинах

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

(remaining-time 30)
;;=> 10

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

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

(prep-time 2)
;;=> 4

4. Обчисліть загальний час роботи в хвилинах

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

(total-time 3 20)
;;=> 26
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Clojure Exercism

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

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