Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивно создать связный список, рекурсия в perl 
:(
    Опции темы
klifleopard
Дата 10.6.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.8.2009

Репутация: нет
Всего: нет



Здравствуйте. Недавно начал изучать Perl поэтому извиняюсь за банальный вопрос - как рекурсивно построить связный список? Есть нерабочий пример:

Код

#Главная программа
if (defined $head) {undef $head;}
while ($value = <>)
{ insert ($head, $value);
}
print "\n";
 list_print ($head);
#Добавление в список

sub insert ()
{ my ($item, $p)= shift @_;

  unless ($item)
  { $item ={};                          #Анонимный хеш, создаем запись
    $item->{INFO}= $p;
    $item->{NEXT}=undef;   #Последний элемент в списке
    $_[0]=$item;
    return;
  }
 if ($item->{INFO} == $p)
 {warn "Такое значение уже есть в списке!\n";}
 else
 {insert ($item->{NEXT},$p);}
}

#Печать списка
sub list_print ()
 {  my ($item) = shift @_;
  unless ($item) { return;}
  else
  {   print "$item->{INFO}";
   list_print ($item->{NEXT});  }}


Может кто нибудь прокомментировать данный код и сказать что неправильно?  smile
PM MAIL   Вверх
arto
Дата 10.6.2010, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



для чего это вам?
PM MAIL ICQ   Вверх
klifleopard
Дата 10.6.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.8.2009

Репутация: нет
Всего: нет



Цитата(arto @ 10.6.2010,  14:18)
для чего это вам?

Лабораторную такую дали. Ошибку увидел - shift в первой строке подпрограммы insert() явно лишний. В принципе задачу считаю решенной, но если есть идеи как усовершенствовать данный алгоритм, буду им только рад. smile
PM MAIL   Вверх
shamber
Дата 10.6.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(klifleopard @  10.6.2010,  14:32 Найти цитируемый пост)
shift в первой строке подпрограммы insert() явно лишний.

необязательно, можно и только shift оставить.
PM MAIL Jabber   Вверх
klem4
Дата 15.6.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 27.7.2008

Репутация: 2
Всего: 2



Если интересно, немного намека на ооп

Код

#!/usr/bin/perl -w
use strict;

    my $list = new List;

    $list->_push(1);
    $list->_push(2);
    $list->_print;

    print "\n";

    $list->_push( $_ ) for ( qw[ a b c d ] );
    $list->_print;

package Node;

sub new
{
    my ( $class, $value ) = @_;
    my $self =
    {
        value   => $value,
        _next   => undef
    };

    bless $self, $class;
}
1;

package List;

sub new
{
    my $class = shift;
    my $self =
    {
        head    => undef,
        _last   => undef
    };

    bless $self, $class;
}

sub _push
{
    my ( $self, $value ) = @_;
    my $node = new Node( $value );

    if ( $self->{head} )
    {
        $self->{_last}->{_next} = $node;
        $self->{_last} = $node;
    }
    else
    {
        $self->{head}  = $node;
        $self->{_last} = $node;
    }
}

sub _print
{
    my $self = shift;
    my $head = $self->{head};

    while ( $self->{head} )
    {
        print $self->{head}->{value}, "\n";
         $self->{head} = $self->{head}->{_next};
    }

    $self->{head} = $head;
}

1;


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.