SICP, tentativa 2 (blog publicado em português)

101 views
Skip to first unread message

Reginaldo J. S. Filho

unread,
Feb 16, 2010, 11:16:50 PM2/16/10
to ei...@googlegroups.com
Pessoal, notei que, no ano passado, houve um bom movimento inicial pra resolver os exercícios do SICP, mas acabou que todo mundo foi desanimando e dizendo o velho "o ano que vem eu faço"...

Para que o esforço não morra, resolvi começar a publicar as minhas soluções no meu recém-criado blog, acessível em http://reginaldojsf.blogspot.com/. Tem dois posts explicando direitinho os motivos pelos quais estou fazendo isso, e a primeira seção já está no ar.

Já resolvi os exercícios dos 2 primeiros capítulos, então esses vão sair bem rapidinho. Depois, vamos ver em qual ritmo sai.

Enfim, espero que isso seja proveitoso pra alguém. Basicamente, se pelo menos mais uma pessoa embarcar nessa, considero meu esforço recompensado. O que posso dizer é que, pra mim, os conhecimentos tirados do SICP foram e vêm sendo muito úteis.

Gostaria de ouvir feedback. Críticas são benvindas. Como podem perceber, eu tentem apresentar as soluções bem detalhadamente. Talvez, tenha exagerado na dose... Se quiserem que eu diminua o nível de detalhe, é só falar.


Grande abraço a todos,

Reginaldo José da Silva Filho

Luciano Ramalho

unread,
Feb 17, 2010, 9:11:02 PM2/17/10
to ei...@googlegroups.com
Reginaldo, parabéns pela iniciativa.

Este é o ano do meu TCC, então não vai ser em 2010 que eu vou retomar
o SICP, infelizmente. Quem sabe em 2011!

[ ]s
Luciano


2010/2/17 Reginaldo J. S. Filho <xre...@gmail.com>:

> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Estrutura e
> Interpretação de Programas de Computador" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para ei...@googlegroups.com.
> Para cancelar a inscrição nesse grupo, envie um e-mail para
> eipc+uns...@googlegroups.com.
> Para obter mais opções, visite esse grupo em
> http://groups.google.com/group/eipc?hl=pt-BR.
>

--
"""
Many were increasingly of the opinion that they'd all made a big
mistake in coming down from the trees in the first place. And some
said that even the trees had been a bad move, and that no one should
ever have left the oceans. (DA/HHGTTG)
"""

Geraldo Coen

unread,
Feb 19, 2010, 6:51:58 AM2/19/10
to ei...@googlegroups.com
Reginaldo, muito boa iniciativa!

Como sempre, o problema é tempo.  Na primeira rodada não consegui participar,  vou tentar nesta.

Abraço,
Geraldo Coen

2010/2/17 Luciano Ramalho <ram...@gmail.com>

Geraldo Coen

unread,
Mar 21, 2010, 12:26:42 PM3/21/10
to eipc
Li, na verdade reli, o capítulo I. Acho que está claríssimo para mim, principalmente depois de uma experiência excelente que fiz com Lisp (Scheme). Partindo da idéia que planilha é uma espécie de programação funcional, fui desenvolver uma planilha em Lisp. Comecei com programação procedural, fui melhorando, entendendo a idéia de funcional, e cheguei finalmente a uma solução simplíssima, praticamente sem variáveis, só chamada a função. O segredo está em aplicar eval a todos os elementos de uma lista que é a planilha. Números ou fórmulas (lisp). Pronto, está desenvolvida uma planilha funcional.

Aprendi muito neste processo. Estou até com vontade de continuar, em vez de fazer os exercícios do capítulo 1. Fazer a parte interativa da planilha.

Também pesquisei, não fui o único com esta idéia, há várias planilhas escritas em Lisp, até em Emacs-Lisp.

Abraços,
Geraldo


Vilson Vieira

unread,
Mar 21, 2010, 2:32:42 PM3/21/10
to ei...@googlegroups.com
Olá Geraldo,

muito interessante! Não havia pensado nessa abordagem funcional. Pensando assim, um bd funcional seguiria nessa mesma linha não? Poderia compartilhar conosco a sua planilha?

Isso me fez lembrar das tabelas do org-mode de Emacs [1]. Será que elas são implementadas desse jeito também?

Abraços!

[1] http://orgmode.org/manual/Tables.html#Tables

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Estrutura e Interpretação de Programas de Computador" dos Grupos do Google.
Para postar neste grupo, envie um e-mail para ei...@googlegroups.com.
Para cancelar a inscrição nesse grupo, envie um e-mail para eipc+uns...@googlegroups.com.
Para obter mais opções, visite esse grupo em http://groups.google.com/group/eipc?hl=pt-BR.



--
Vilson Vieira

vil...@void.cc

personal ~ http://automata.cc

collective ~ http://musa.cc

Geraldo Coen

unread,
Mar 24, 2010, 7:44:30 AM3/24/10
to eipc
É assim: parti de uma dica num video excelente sobre programação funcional, em que o professor diz que a linguagem mais usada hoje em dia, de longe, é funcional. Planilha! Não tinha pensado nisso.  http://www.infoq.com/presentations/Taming-Effect-Simon-Peyton-Jones

Bem, mas uma planilha não é exatamente uma linguagem universal. Aí pensei em desenvolver uma planilha em Lisp. E o resultado foi: (mapcar (function eval) planilha)

Claro que falta toda a parte interação com usuários, cálculo da posição das células, linha, coluna, entrada de dados e fórmulas, etc. Fiz um pouco para poder testar, comecei com uma programação meio procedural, acabei chegando na funcional. A planilha é uma lista Lisp, cujos elementos são ou números ou listas Lisp que são executadas com eval.

Como fazer uma planilha convencional? Tem que traduzir (parse) as expressões convencionais em listas Lisp, o que não é difícil.

Não olhei Org em detalhe. Vi SES, que faz exatamente isso, implementa uma planilha convencional. Dei uma olhada no código, lá no meio na hora do recálculo da planilha, ele faz praticamente o mesmo que eu. Tem algumas outras planilhas em Lisp, como XXL. E Resolver em Python. Mas o que eu gostaria de desenvolver é mais do que refazer em Lisp uma planilha convencional. É explorar a idéia que uma planilha tem muito a ver com uma lista em Lisp: uma estrutura que tanto pode ser dados quanto programa. Talvez generalizar a idéia de lista Lisp para planilha com muitas células que podem conter um átomo ou uma lista a ser executada?

Outra idéia a explorar é que o ciclo REPL clássico do Lisp é identico ao ciclo de uso de uma planilha.

Muitas idéias, preciso explorar mais.

Abraços,
Geraldo

2010/3/21 Vilson Vieira <vil...@void.cc>

Luciano Ramalho

unread,
Mar 24, 2010, 10:01:18 AM3/24/10
to ei...@googlegroups.com
Muito legal as idéias, o link e a narrativa, Geraldo.

Um dos exemplos mais legais que eu conheço para demonstrar as
características dinâmicas de Python é uma "planilha" também, saca só:

http://code.activestate.com/recipes/355045/

[ ]s
Luciano

2010/3/24 Geraldo Coen <coen.g...@gmail.com>:

--
"""
O burocrata consegue transformar qualquer solução em um problema.
"""

Andrei Formiga

unread,
Mar 24, 2010, 11:06:03 AM3/24/10
to ei...@googlegroups.com

2010/3/24 Geraldo Coen <coen.g...@gmail.com>

É assim: parti de uma dica num video excelente sobre programação funcional, em que o professor diz que a linguagem mais usada hoje em dia, de longe, é funcional. Planilha! Não tinha pensado nisso.  http://www.infoq.com/presentations/Taming-Effect-Simon-Peyton-Jones


Caracterizar planilhas como programação funcional é interessante, mas tem mais do que isso e é possível brincar com outros conceitos aí. 

Se considerarmos uma célula como uma variável (ou uma posição em uma lista), uma característica interessante da planilha é que o conteúdo da célula pode ser mudado (mutabilidade não é uma característica da prog. funcional). Mais interessante ainda, todas as células que dependem do valor da célula que foi alterada também são mudadas automaticamente. Isto é, as relações entre os dados são mantidos, coisa que não acontece normalmente nas linguagens funcionais (ou nas imperativas). 

(O uso da palavra relação aí já dá a idéia de uma aproximação entre planilhas e bancos de dados relacionais também. De fato, é possível inferir a partir dos dados da planilha o esquema de dados para um BD; houve uma palestra relacionada a isso no SBLP do ano passado, mas não consegui achar nenhuma referência, só um artigo [1] do prof. João Saraiva [2], que apresentou a palestra). 

Mas voltando, existem linguagens em que a atualização de uma variável causa a atualização dos valores e variáveis das quais a primeira depende. Isso existe de forma limitada no paradigma de programação dataflow [3] e, de maneira mais completa, no sistema FrTime do PLT Scheme [4] e na linguagem Flapjax [5], criada pelo mesmo grupo do FrTime. Sendo que FrTime surgiu das idéias de programação Funcional Reativa [6], e estamos de volta ao começo :) O segredo para lidar com a mutabilidade na FRP é tratar tudo como função do tempo, e trabalhar com a sequencia de eventos no tempo que leva de um estado a outro. 

Acho que criar uma planilha como uma linguagem funcional talvez não seja a melhor idéia, mas eu acharia muito interessante ver uma planilha que fosse uma linguagem de programação completa, baseada em FRP. 


[4] http://docs.plt-scheme.org/frtime/index.html

--
[]s, Andrei Formiga

Luciano Ramalho

unread,
Mar 24, 2010, 11:11:37 AM3/24/10
to ei...@googlegroups.com
Andrei, eu discordo da sua análise quanto à mutabilidade em planilhas,
porque se você imaginar o algoritmo de uma planilha como o "eval" que
acontece em um recalculo, não existe mutabilidade alguma. as variáveis
não são alteradas pelo eval, as variáveis são alteradas pelo usuário
antes de acionar o recálculo. Elas são os parâmetros de entrada. As
células que contém os resultados não são variáveis, são expressões.

Mas quero dar uma olhada em FrTime.

[ ]s
Luciano

2010/3/24 Andrei Formiga <andrei....@gmail.com>:

> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "Estrutura e
> Interpretação de Programas de Computador" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para ei...@googlegroups.com.
> Para cancelar a inscrição nesse grupo, envie um e-mail para
> eipc+uns...@googlegroups.com.
> Para obter mais opções, visite esse grupo em
> http://groups.google.com/group/eipc?hl=pt-BR.
>

--
"""

Geraldo Coen

unread,
Apr 5, 2010, 6:48:55 AM4/5/10
to ei...@googlegroups.com
Temos assunto(s) aqui.  Fico contente que o exemplo que dei se liga a tantas direções de pesquisa.  E tudo partindo do uso do Eval, como você me mostrou em Python, Luciano. Muito claro.

A sugestão de ter a ver com bancos de dados relacionais é forte. O que me ocorreu quando pensei numa planilha em Lisp é que a planilha pode ser uma generalização da lista Lisp: dados e programa juntos. Daí um modelo que poderia ir muito mais longe que banco de dados, até chegar a aplicações. A estudar bastante, começando com todas estas dicas do Andrei. Frtime e outras.

Abraços


2010/3/24 Luciano Ramalho <ram...@gmail.com>
Reply all
Reply to author
Forward
0 new messages