quinta-feira, 8 de maio de 2008

Clip no REPL

A procrastinação leva o cara a fazer coisas como essa:

(use utils)

(define (stupid-clip text)
(string-append
" --
/ \\
| |
@ @
|| ||
|| ||
|\\_/|
\\___/\n

What do you want to mess up with today?

"

text
))

(toplevel-command
'annoy
(lambda ()
(print
(stupid-clip (with-output-to-string
(lambda ()
(apropos (read))))))))

Usando isso no REPL:

$ csi -n

CHICKEN
(c)2008 The Chicken Team
(c)2000-2007 Felix L. Winkelmann
Version 3.2.0 - linux-unix-gnu-x86 [ manyargs dload ptables applyhook ]
SVN rev. 10664 compiled 2008-05-07 on ze-dureza (Linux)

#;1> (load "annoy.scm")
; loading annoy.scm ...
; loading library utils ...
#;2> ,annoy close
--
/ \
| |
@ @
|| ||
|| ||
|\_/|
\___/


What do you want to mess up with today?

close-input-port : (procedure port948)
close-input-file : variable
close-output-file : variable
close-output-port : (procedure port949)

Atualização

Na realidade, o código pode ser um pouco mais simples:


(use utils)

(toplevel-command
'annoy
(lambda ()
(print " --
/ \\
| |
@ @
|| ||
|| ||
|\\_/|
\\___/\n

What do you want to mess up with today?

"
)
(apropos (read))))

2 comentários:

alex disse...

Hahahaha, gostei muito dessa :-)

Mario Domenech Goulart disse...

O resultado da procrastinação até foi útil: serviu para achar um bug no compilador. :-)

O resultado mostrado no exemplo da execução de ,annoy close mostra close-{in,out}put-port como variáveis. No mínimo, estranho.

Era um bug mesmo. Thread completa em http://lists.gnu.org/archive/html/chicken-hackers/2008-05/msg00000.html

E a correção alguns momentos depois: http://trac.callcc.org/log/chicken/trunk/library.scm?rev=10735