12.07.2015 Views

Выпуск 14

Выпуск 14

Выпуск 14

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

При записи списков чисел (или других объектовперечислимого типа; о классах типов — дальше)можно использовать промежутки:Hugs> [1 .. 4][1, 2, 3, 4]Если правый конец промежутка не указан, томы получим бесконечный список, начинающийсяс заданного элемента (не стоит пытаться еговывести, он все-таки бесконечный), ленивостьHaskell легко позволяет работать с такими структурамиданных.Элементами списков также могут быть списки,причем не обязательно, чтобы все внутренние спискиодного большого списка имели одинаковуюдлину: в Haskell тип список обозначает список любойдлины.Операций над списками в Haskell великое множество:это и традиционная для массивов индексация,и взятие головы и хвоста списка, и подсчетдлины, и нахождение минимального и максимальногоэлементов, и многое-многое другое. За полнымперечнем можно обратиться к специальнойлитературе [4, 5, 6]. Для нас сейчас самыми интереснымиявляются свертки списка.Суммирование элементов списка:Hugs> sum [1, 2, 3, 4]10Подсчет произведения элементов списка:Hugs> product [1, 2, 3, 4]24С помощью таких сверточных функций красивореализуются многие математические задачи, кпримеру, факториал:factorial n = product [1 .. n]Посмотрите на это определение функции,считаю щей факториал, и скажите, что оно вамнапоминает? Да это же один в один математическоеопределение: “Факториал числа n равен произведениювсех чисел от 1 до n включительно”!Вспомните еще хоть один неспециализированныйязык, который позволил бы вам определятьфункции в том виде, в котором они задаются вматематике.Одним из самых мощных средств работы сосписками в Haskell являются так называемые списочныевыражения. Вспомните, как определяютсямножества в математике, например: “МножествоS — это множество x, принадлежащих множествуN и удовлетворяющих системе неравенств...”.В языке Haskell имеются все средства для заданиямножеств точно таким же языком! Например, множествоудвоенных чисел из промежутка от 1 до 10,тогда вы можете записать:Hugs> [x * 2 | x

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!