O desafio
Imagine-se como o imperador de um planeta de outra galáxia.
Conseguiu visualizar? Agora, sendo um imperador de um lugar tecnologicamente avançado, você tem uma tarefa pela frente: implantar uma rede de rotas de voo de naves espaciais no espaço aéreo de seu planeta.
Páginas
Tuesday, August 16, 2011
Monday, August 1, 2011
Racket com readline
Para quem estava acostumado ao IPython, usar o interpretador do Racket no terminal pode ser um bocado decepcionante.
Isto porque por padrão o REPL é bem rudimentar, sem suporte a auto-completar, sem histórico, sem nada...
O que existe entretanto é um problema com licenças. O readline é distribuído em GPL, e o Racket em LGPL, e para não haver conflitos o suporte a readline vem desativado por padrão. Mas ele está lá.
A documentação em inglês dá os detalhes completos: Readline: Terminal Interaction.
Este módulo vai tornar sua experiência no REPL muito mais agradável, naqueles momentos em que você está no terminal e não quer abrir o DrRacket ou o Emacs.
Para usar basta iniciar o racket assim:
racket -il readline
E se você não quiser ter que fazer isto toda vez, basta instalar permanentemente o suporte ao readline chamando uma função :D
Pronto. Agora toda vez que executar racket você entratá num REPL com histórico (que lembra inclusive as sessões anteriores), auto-completar usando tab, seta pra cima e pra baixo pra navegar nos comandos, etc.
Para ficar melhor ainda, adicione uma linha no arquivo ~/.inputrc:
set blink-matching-paren on
Esta sugestão do Eli Barzilay faz com que seu terminal indique qual "(" está relacionado com qual ")" quando você digita, e funciona tanto dentro do racket quanto em qualquer outro canto, inclusive no IPython. Também funciona com [] e {}.
E não pára por aí... o REPL vai ficar melhor ainda com o XREPL que vem aí na próxima release.
Com ele será possível fazer coisas já corriqueiras no IPython, agora em Racket.
Happy hacking!
Thursday, July 28, 2011
Estatísticas do Dojo Rio em 2011
Resolvi fazer uns gráficos para mostrar as linguagens que usamos nos dojos, mais como curiosidade que outra coisa.
Para conseguir gerar os dados tive que renomear alguns diretórios de dojos antigos que estavam sem a descrição de problema e linguagem. Depois, atualizei meu script para gerar as estatísticas.
Todos os dados disponíveis:
Portanto as linguagens mais utilizadas neste ano, assim como em todos os tempos, são Python, Ruby e Javascript.
Alguma sugestão de gráfico que você gostaria de ver?
Para conseguir gerar os dados tive que renomear alguns diretórios de dojos antigos que estavam sem a descrição de problema e linguagem. Depois, atualizei meu script para gerar as estatísticas.
Os gráficos
Este ano:Todos os dados disponíveis:
Portanto as linguagens mais utilizadas neste ano, assim como em todos os tempos, são Python, Ruby e Javascript.
Alguma sugestão de gráfico que você gostaria de ver?
Tuesday, July 19, 2011
Escolhendo um Lisp: do Clojure ao Racket
Graças a um email de um amigo, o Lucas Teixeira, finalmente escrevi algumas coisas que já vinha comentando com algumas pessoas, geralmente nos pós-dojos.
Era pra ser um email pro Lucas, mas acabei expressando coisas que poderiam ficar públicas.
Bem, ele começou dizendo no email:
Vamos a um apanhado de impressões sobre algumas linguagens da família lisp, começando com Clojure, passando por Common Lisp, Scheme e chegando em Racket.
Era pra ser um email pro Lucas, mas acabei expressando coisas que poderiam ficar públicas.
Bem, ele começou dizendo no email:
Então... sempre quis aprender programação funcional. Já tentei Haskell, LISP, Scheme, mas nunca pegou de verdade.Cara, foi muito surpreendente seu email.
Tô tentando aprender Clojure agora. Baixei o Clojure Box e uns tutoriais da Internet. Tô resolvendo uns problemas do Project Euler e o clojure-koans.
Tem alguma dica de material?
Que tipo de coisa você tá / tava fazendo com Clojure?
Vamos a um apanhado de impressões sobre algumas linguagens da família lisp, começando com Clojure, passando por Common Lisp, Scheme e chegando em Racket.
Descrevendo objetos com Racket
O Racket é muito esperto, e com o auxílio de um módulo disponível no PLaneT é possível fazer coisas bem divertidas, como fazer contas:
Tão esperando que pra instalar o Racket e ver o output?
(Alias, que tal implementarmos um "describe" no dojo?)
Veja a documentação do describe pra ver o que mais ele pode fazer...
#lang racket (require (planet williams/describe/describe)) (displayln (string-join (map (λ (t) ((if (exact-integer? t) integer->string (curry format "~a")) t)) `(I will show you how Racket knows how to count.,"\n" Racket knows that 3 + 4 is ,(+ 3 4),"\n" Racket knows that 5 * 9 is ,(* 5 9),"\n" and that 5 / 4 is ,(/ 5 4),"\n" and 2 ^ 10 is ,(expt 2 10),"\n" and much more...)) " ")) (define (! n) (if (= n 0) 1 (* n (! (sub1 n))))) (describe (- (! 40) (! 41)))
Tão esperando que pra instalar o Racket e ver o output?
(Alias, que tal implementarmos um "describe" no dojo?)
Veja a documentação do describe pra ver o que mais ele pode fazer...
Subscribe to:
Posts (Atom)

