Pergunta

SICP - "Estrutura e interpretação de programas de computador"

Explicação para o mesmo seria bom

Alguém pode explicar sobre Abstração metalingística

Foi útil?

Solução

O SICP realmente levou para casa o ponto em que é possível observar o código e os dados da mesma coisa.

Eu entendi isso antes ao pensar em máquinas de Turing Universal (a entrada de um UTM é apenas uma representação de um programa) ou a arquitetura von Neumann (onde uma única estrutura de armazenamento contém código e dados), mas o SICP deixou a idéia muito mais clara . O esquema (LISP) ajudou aqui, pois a sintaxe para um programa é exatamente a mesma que a sintaxe para listas em geral, a saber, as expressões S.

Depois de ter a "equivalência" de código e dados, de repente muitas coisas se tornam fáceis. Por exemplo, você pode escrever programas que tenham métodos de avaliação diferentes (preguiçosos, não determinísticos, etc.). Anteriormente, eu poderia ter pensado que isso exigiria uma extensão da linguagem de programação; Na realidade, eu posso apenas adicioná -lo ao idioma, permitindo que o idioma principal seja mínimo. Como outro exemplo, você pode implementar da mesma forma uma estrutura orientada a objetos; Novamente, isso é algo que eu poderia ter pensado ingenuamente exigiria modificar o idioma.

Aliás, uma coisa que eu gostaria que a SICP mencionasse mais: tipos. Tipo de verificação em compilação O tempo é uma coisa incrível. A implementação do SICP da programação orientada a objetos não teve esse benefício.

Outras dicas

Ainda não li esse livro, só olhei para os cursos de vídeo, mas isso me ensinou muito. Funções como cidadãos de primeira classe foram me impressionantes. Executar uma "variável" era algo muito novo para mim. Depois de assistir a esses vídeos da maneira como vejo JavaScript e a programação em geral mudou bastante.

Ah, acho que menti, o que realmente me impressionou foi que + era uma função.

Eu acho que a coisa mais surpreendente sobre o SICP é ver como poucas primitivas são realmente necessárias para tornar uma linguagem completa de Turing-quase qualquer coisa pode ser construída a partir de quase nada.

Como estamos discutindo o SICP, colocarei meu plugue padrão para as palestras em vídeo em http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/, que é a melhor introdução à ciência da computação que você pode esperar em 20 horas.

O que eu achei muito legal era fluxos com avaliação tardia. Aquele sobre gerar primos era algo que eu pensei que era realmente legal. Como um dispensador "pez" que magicamente dispensa o próximo primo na sequência.

Um exemplo de "os dados e o código são a mesma coisa" da resposta de A. Rex me deu de uma maneira muito profunda.

Quando me ensinaram Lisp na Rússia, nossos professores nos disseram que o idioma era sobre listas: carro, cdr, contras. O que realmente me surpreendeu foi o fato de você não precisar dessas funções - você pode escrever o seu próprio, com o fechamento. Então, Lisp não é sobre listas, afinal! Isso foi uma grande surpresa.

Um conceito com o qual não estava completamente familiarizado era a ideia de coroutinas, ou seja, ter duas funções fazendo um trabalho complementar e com o controle de fluxo do programa alternativo entre eles.

Eu ainda estava no ensino médio quando li SICP e me concentrei nos primeiros e segundo capítulos. Para mim, na época, gostei de expressar todas essas idéias matemáticas em código e fazer com que o computador faça a maior parte do trabalho sujo.

Quando eu estava orientando o SICP, fiquei impressionado com diferentes aspectos. Por um lado, o enigma de que dados e código são realmente a mesma coisa, porque o código é executável dados. O capítulo sobre abstrações metalinguísticas é impressionante para muitos e tem muitas mensagens para levar para casa. A primeira é que todas as regras são arbitrárias. Isso incomoda alguns estudantes, especialmente aqueles que são físicos no coração. Eu acho que a beleza não está nas próprias regras, mas ao estudar a conseqüência das regras. Uma alteração de uma linha no código pode significar a diferença entre o escopo lexical e o escopo dinâmico.

Hoje, embora o SICP ainda seja divertido e perspicaz para muitos, entendo que está sendo datado. Por um lado, ele não ensina habilidades e ferramentas de depuração (eu incluo sistemas de tipo), essencial para trabalhar nos sistemas gigantescos de hoje.

Fiquei muito surpreso com o quão fácil é implementar idiomas. Esse pode escrever intérprete para esquema em um quadro -negro.

Eu me senti recursão em sentido diferente depois de ler alguns dos capítulos do SICP

Estou agora na seção "Sequências como interfaces convencionais" e encontrei o conceito de procedimentos como cidadãos de primeira classe bastante fascinante. Além disso, a aplicação da recursão é algo que nunca vi em nenhum idioma.

Fechamentos.

Vindo de um fundo principalmente imperativo (Java, C#, etc.-eu só li SICP há um ano ou mais pela primeira vez e estou relendo agora), pensar em termos funcionais foi uma grande revelação para mim; Isso mudou totalmente a maneira como penso no meu trabalho hoje.

Eu li a maior parte do livro (sem exercício). O que aprendi é como abstrair o mundo real em um nível específico e como implementar um idioma.

Cada capítulo tem idéias me surpreende:

Os dois primeiros capítulos me mostram duas maneiras de abstrair o mundo real: abstração com o procedimento e abstração com dados.

O capítulo 3 apresenta o tempo no mundo real. Isso resulta em estados. Tentamos tarefas, o que levanta problemas. Então tentamos fluxos.

O capítulo 4 é sobre abstração metalingüística, em outras palavras, implementamos um novo idioma construindo um avaliador, que determina o significado das expressões.

Como o avaliador no capítulo 4 é um programa LISP, herda a estrutura de controle do sistema LISP subjacente. Assim, no capítulo 5, mergulhamos na operação passo a passo de um computador real com a ajuda de um modelo abstrato, a máquina de registro.

Obrigado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top