有限リストの連結・改

リストの連結で,同じリストを連結させようとすると循環することに気がつきました.ということで,複製処理を追加です.さらに第一引数のリストを破壊してしまうことにも気がついたので修正です.

sub Lconcat{
    my $a=shift;
    my $b=shift;
    $b=Lduplicate($a) if $a eq $b;
    my $c = Lduplicate($a);
    my $d = $c;
    while (my $temp = Ltail($d)){
	$d=$temp;
    }
    $d->[1]=$b;
    return $c unless scalar @_;
    Lconcat($c,@_);
}

さらに仕様を拡張して,二つ以上のリストが与えられてもそれらを連結するようにしました.