Треки
/
Common Lisp
Common Lisp
/
Вправи
/
Числове розбиття Логана
Числове розбиття Логана

Числове розбиття Логана

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

Вступ

Зведення

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

У Common Lisp для цього використовують функцію reduce. У найпростішому випадку це має такий вигляд:

(reduce #'function-to-apply sequence :initial-value value)

Зауважмо, що початкове значення задано: саме воно буде тим «поточним накопиченим значенням», яке передають у функцію, коли обробляють перший елемент.

Ось приклад, який додає числа масиву, починаючи з початкового значення 10:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

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

Вказівки

Логан, прибулець із Lisp, любить числа, а ще любить наводити лад.

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

1. Розподіл числа за категоріями

Спочатку нам потрібно створити функцію, яка приймає пару з двох масивів і число та кладе це число до потрібного масиву залежно від того, парне воно чи непарне:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. Розподіл багатьох чисел за категоріями

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

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Common Lisp Exercism

Час розпочати Числове розбиття Логана?

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