[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