[Rio-pm] [Golf] Função drop Haskell

Daniel de Oliveira Mantovani daniel.oliveira.mantovani em gmail.com
Quarta Fevereiro 3 11:19:23 PST 2010


Olá pessoal, o desafio envolve a função drop do Haskell:

<haskell>
ghci> myDrop 2 "foobar"
"obar"
ghci> myDrop 4 "foobar"
"ar"
ghci> myDrop 4 [1,2]
[]
ghci> myDrop 0 [1,2]
[1,2]
ghci> myDrop 7 []
[]
ghci> myDrop (-2) "foo"
"foo"
</haskell>

Eu fiz em Perl, para ficar claro:

<perl>
sub drop {
    my ( $n, $xs ) = @_;
    if ( ref $_[1] ne 'ARRAY' ) {
        $n <= 0 ? return $_[1] : return substr( $_[1], $n );
    }
    if ( $n <= 0 || !@_ ) {
        return @{$xs};
    }
    else {
        shift @{$xs};
        drop( ( $n - 1 ), $xs );
    }
}
</perl>

Exemplos:
mantovani em mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
$_ for drop(3,[1,2,3,4,5,6])'
4
5
6

mantovani em mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
$_ for drop(1,"ofernandoagoragolf")'
fernandoagoragolf

mantovani em mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
$_ for drop(2,["mantovani","garu","fernando","blabos"])'
fernando
blabos

mantovani em mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
$_ for drop(-1,["mantovani","garu","fernando","blabos"])'
mantovani
garu
fernando
blabos

mantovani em mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
$_ for drop(-1,"mantovani")'
mantovani

mantovani em mantovani-desktop:~/Perl/Funcional$ perl -MHaskell -E 'say
$_ for drop(10,"mantovani")'

-- 
"If you’ve never written anything thoughtful, then you’ve never had
any difficult, important, or interesting thoughts. That’s the secret:
people who don’t write, are people who don’t think."


Mais detalhes sobre a lista de discussão Rio-pm