Бесплатный курс по clojure. Зарегистрируйтесь для отслеживания прогресса →

Clojure: Сокращенный синтаксис создания функции

Создание функций - настолько частая операция, что в Clojure была добавлена сокращенная версия определения (с одновременным объявлением) функции с помощью defn. Возьмем для примера определение функции возведения в квадрат:

(def square (fn [n] (* n n)))

А теперь посмотрим сокращенную версию этого же определения:

(defn square [n] (* n n))
(square 3) ; 9

Первое что бросается в глаза - отсутствие слова fn. Вместо него, после defn указывается имя функции, после имени - список параметров. Затем идет тело функции. Объявленная выше функция возведения в квадрат принимает один аргумент - n. Пример объявления функции с двумя аргументами:

(defn sum [x y] (+ x y))
(sum 3 5) ; 8

Помимо определения сигнатуры функции, мы можем тут же использовать деструктуризацию (destructuring). Пример функции суммирования, в которую передается массив из двух элементов:

(defn sum [[x y]] (+ x y))
(sum [3 5]) ; 8
(sum [10 10]) ; 20

Задание

Создайте функцию с именем sum-of-squares (используя короткий синтаксис), которая находит сумму квадратов двух чисел.

(sum-of-squares 2 3) ; 13

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе