bytebuster: (ITCrowd-Jen)
[personal profile] bytebuster
"ДНР", против которой украинские власти проводят АТО, проводит АТО против боевиков Безлера (Беса).

Запомните, детки: функция АТО называется рекурсивной. На языке программирования Haskell ее можно представить в виде:

ato (x:xs) = kill x : ato xs

где x:xs это список террористов, x - первый элемент (голова) списка, а xs - оставшаяся часть (хвост) списка.

Для того, чтобы функция завершилась, а не ушла в бесконечный цикл, необходимо определить базовый случай рекурсии:

ato [ ] = [ ]

где [ ] - это пустой список террористов, т.е. когда все террористы уничтожены.

Какой же тип, детки, будет у функции ato? Эта функция принимает на вход список террористов (списки, как вы помните, обрамляются квадратными скобками: [Террорист]), затем берет первый элемент этого списка и применяет к нему функцию kill, возвращая нам значение типа "Труп террориста", а затем применяет функцию ato к оставшейся части списка. В итоге на выходе функции мы получаем список значений "Труп террориста": [Труп террориста].

Таким образом, функция ato выглядит так:

ato :: [Террорист] -> [Труп террориста]
ato [ ] = [ ]
ato (x:xs) = kill x : ato xs


Следует заметить, детки, что ту же самую функцию можно записать короче при помощи функции высшего порядка (то есть функции, которая может принимать в качестве аргументов другие функции) map, которая применяет нужную функцию к каждому элементу списка:

ato :: [Террорист] -> [Труп террориста]
ato spisokTerroristov = map (kill) spisokTerroristov


Это была лекция по языку Haskell.
Сторінку створено Неділя, 15 Лютий 2026 01:53

Грудень 2025

П В С Ч П С Н
1234567
891011121314
15161718192021
22232425262728
2930 31    
Створено з Dreamwidth Studios

За стиль дякувати