Algo que eu sinto muita falta é o REDUCE do lisp, veja este código em LISP:
(reduce #'max (mapcar #'parse-integer (split-sequence #Space "3 42 1")))
Não existe maneira mais elegante de splitar uma string e pegar a maior dos elementos. Ruby chega quase lá:
"3 42 1".split(" ").map {|x| x.to_i }
Consigo splitar e transformar em inteiros, porém, para achar o máximo eu tenho que usar uma variável a mais e fazer um código muito mais deselegante:
lst="3 42 1".split(" ").map {|x| x.to_i }
max=-1
lst.each do |x|
if (x > max)
max = x;
end
end
print max,"n"
Uma pena.
4 comentários:
Em python dá pra fazer quase tão bonito quanto.
maior = reduce(max, ([int(numero) for numero in "500 901 101 3 42 1".split()]))
print(maior)
E com um pouquinho de paciência, a versão em ruby traduzida da versão em python:
puts ("3 42 1".split(" ").map {|x| x.to_i }).max
Legal saber do max no ruby, não tinha achado na documentação. Ainda assim não é tão genérico quanto o Reduce, mas Ruby é legal mesmo assim.
Um sujeito propoe a implementacao de reduce em ruby:
http://www.xs4all.nl/~hipster/lib/ruby/reduce
existe o reduce em PHP, mas a linguagem nao ajuda nem um pouco...
$a = explode( " ","3 42 1" );
$b = array_reduce( $a, "max" );
Postar um comentário