有限リンクトリストの生成と簡単な例

毎回手動で作っていては大変なので,規則に応じて自動的にリンクトリストを生成することを考えます.基本となるのは次の関数です.

sub node{
    my ($head, $tail)=@_;
    return [$head, $tail];
}

ノードの要素と次の要素へのポインタ(ここでは無名配列)を与えてリンクトリストを作成します.簡単なリンクトリストを作ってみます.ここでのリンクトリストの定義によって,再帰を使います..

sub num_fromto{
    my ($start, $end)=@_;
    return undef if $start>$end;
    return node($start, num_fromto($start+1, $end));
}

num_fromtoの使用例と結果は次のようになります.

print Dumper num_fromto(1,4);

$VAR1 = [
          1,
          [
            2,
            [
              3,
              [
                4,
                undef
              ]
            ]
          ]
        ];

単純に指定された数値から数値までのリストを作ります.最初の引数が二番目の引数よりも大きい場合はundefを返します.

つぎに,指定した数から始まって指定した個数の要素をもつリンクトリストを作るものを定義しておきます.

sub num_from_term{
    my ($start, $term)=@_;
    return undef if $term<1;
    return node($start, num_from_term($start+1, $term-1));
}

print Dumper num_from_term(2,3);

$VAR1 = [
          2,
          [
            3,
            [
              4,
              undef
            ]
          ]
        ];