PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 147


return $fact[$n] if defined $fact[$n], $fact[$n] = $n * factorial($n - 1)


# n2pat($N, $len)  построить

sub n2pat {

my $1  =

1,

my $N

shift,

my $len =

shift,

my @pat,

while ($1

<= $len +

1) {

push

@pat, $N %

$i,

$N =

mt($N/$i),


 N—й шаблон перестановки длины $1еп

 # На самом деле просто while ($N) {


продолжение


150   Глава 4 • Массивы

Пример 4.4 (продолжение)

}

return @pat;

# pat2perm(@pat)   :   превратить шаблон,   возвращаемый n2pat(),

#   в перестановку целых чисел,
sub pat2perm  {

my @pat        = @_,

my @source = (0  ..   $#pat);

my @perm;

push @perm,   splice(@source,   (pop @pat),   1) while @pat,

return @perm;

# n2perm($N, $len) • сгенерировать N-ю перестановку S объектов sub n2perm {

pat2perm(n2pat(@_));

> Смотри также

Описание функций unshift и splice вperlfunc(l); рецепты 2.7; 10.3.


Хэш и

Выполнять линейный просмотр в ассоциативном массиве — все равно что пытаться забить кого-нибудь до смерти заряженным «Узи».

Ларри Уолл

Введение

Как люди, так и части компьютерных программ взаимодействуют между со­бой самым причудливым образом. Отдельные скалярные переменные похожи на отшельников, ведущих замкнутое существование в рамках собственной личнос­ти. Массив напоминает партию, где множество индивидуумов объединяется под именем харизматического предводителя. Где-то между ними расположилась удобная ниша, в которой живут совокупности связей «один-к-одному» — хэши. В старой документации по Perl хэши часто назывались ассоциативными массивами, но термин получается слишком длинным. Аналогичные структуры данных суще­ствуют и в других языках, где они обозначаются другими терминами — хэш-таб­лицы, таблицы, словари, отображения и даже а-списки, в зависимости от языка.

К сожалению, отношения хэшей являются не равными, а подчиненными — на­пример, «Энди — начальник Ната»; «Кровяное давление пациента — 112/62» или «Название журнала с индексом ISSN 1087-903X — The Perl Journal». Хэш всего лишь предоставляет удобные средства для получения ответов на вопросы типа: «Кто является начальником Ната?» или «Как называется журнал 1087-903Х»? Вы не сможете спросить «Чьим начальником является Энди?» Впрочем, поиску ответов на подобные вопросы посвящен один из рецептов этой главы.




- Начало -  - Назад -  - Вперед -