Skip to content

Correções de erros de escrita e ajustes para satisfazer o linter #57

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ JScript
JavaScript
Jay
John
Jr.
Jr
Just-In-Time
Kleene
Landin
Expand All @@ -46,6 +46,7 @@ MIT
Martin
Marvin
McCarthy
Microsoft
Minsky
Mozilla
Navigator
Expand Down Expand Up @@ -110,6 +111,7 @@ não-inteiros
of
org
png
primalidade
pt-br
script
scripts
Expand All @@ -129,4 +131,4 @@ www
align
alt
code
conduct
conduct
22 changes: 11 additions & 11 deletions 01/1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,26 @@
>Os atos da mente pelos quais exerce a sua ação sobre as ideias simples são fundamentalmente estes três: 1. A combinação, numa ideia composta, de várias ideias simples. 2. A segunda é unir duas ideias, sejam estas simples ou complexas, para pô-las uma cerca da outra, sem reduzi-las a uma, pelo qual se chega aos relacionamentos entre ideias. 3. A terceira é a separação de todas as demais ideias que acompanham uma ideia na sua existência real: essa é a chamada abstração, pela qual a mente obtém todas as ideias gerais.
> — John Locke, Um ensaio sobre o entendimento humano (1690)

Estamos prestes a estudar a ideia de um _processo t._. Processos computacionais são seres abstratos que habitam computadores. Enquanto evoluem, processos manipulam outras coisas abstratas chamadas _dados_. A evolução de um processo é guiada por um padrão de regras chamado de _programa_. Em efeito, nós cojuramos os espíritos do computador com nossos feitiços.
Estamos prestes a estudar a ideia de um _processo t._. Processos computacionais são seres abstratos que habitam computadores. Enquanto evoluem, processos manipulam outras coisas abstratas chamadas _dados_. A evolução de um processo é guiada por um padrão de regras chamado de _programa_. Em efeito, nós conjuramos os espíritos do computador com nossos feitiços.

Um processo computacional é na verdade muito parecido com a ideia de um espírito de um feiticeiro. Não pode ser visto ou tocado. Não é composto por nenhuma matéria. Entretanto, é bem real. Pode realizar trabalho intelectual. Pode responder perguntas. Pode afetar o mundo ao retirar dinheiro de um banco ou ao controlar um braço robótico em uma fábrica. Os programas que usamos para conjurar processos são como os feitiços do feiticeiro. São expressões simbólicas cuidadosamente compostas em arcanas e esotéricas liguagens de programação que descrevem as tarefas que queremos que nossos processos realizem.
Um processo computacional é na verdade muito parecido com a ideia de um espírito de um feiticeiro. Não pode ser visto ou tocado. Não é composto por nenhuma matéria. Entretanto, é bem real. Pode realizar trabalho intelectual. Pode responder perguntas. Pode afetar o mundo ao retirar dinheiro de um banco ou ao controlar um braço robótico em uma fábrica. Os programas que usamos para conjurar processos são como os feitiços do feiticeiro. São expressões simbólicas cuidadosamente compostas em arcanas e esotéricas linguagens de programação que descrevem as tarefas que queremos que nossos processos realizem.

Um processo computacional, em um computador funcionando corretamente, executa os programas com precisão e acurácia. Assim, como o aprendiz de feiticeiro, programadores iniciantes devem aprender a entender e antecipar as consequencias de suas conjurações. Mesmo erros pequenos (geralmente chamados _bugs_ ou _glitches_) em programas podem ter consequências complexas e não antecipadas.
Um processo computacional, em um computador funcionando corretamente, executa os programas com precisão e acurácia. Assim, como o aprendiz de feiticeiro, programadores iniciantes devem aprender a entender e antecipar as consequências de suas conjurações. Mesmo erros pequenos (geralmente chamados _bugs_ ou _glitches_) em programas podem ter consequências complexas e não antecipadas.

Felizmente, apreder a programar é cosideravelmente menos perigoso do que feitiçaria, pois os espíritos que lidamos estão convenientemente contidos de uma forma segura. Programação no mundo real, entretanto, requer cuidado, conhecimento, e sabedoria. Um pequeno _bug_ na criação de um programa para controle por computador, pode por exemplo, levar à catastrófica colapso de um avião ou uma represa ou a auto-destruição de um robô industrial.
Felizmente, aprender a programar é consideravelmente menos perigoso do que feitiçaria, pois os espíritos que lidamos estão convenientemente contidos de uma forma segura. Programação no mundo real, entretanto, requer cuidado, conhecimento, e sabedoria. Um pequeno _bug_ na criação de um programa para controle por computador, pode por exemplo, levar à catastrófica colapso de um avião ou uma represa ou a autodestruição de um robô industrial.

Engenheiros de software mestres possuem a habilidade de organizar programas de forma que eles possam estar seguramente certos de que os processos resultantes irão realizar as tarefas intencionadas. Visualizam o comportamento de seus sistemas com antecedência. Sabem como estruturar programas para qye problemas não antecipados não levem a consequêcias catastróficas, e quando os problemas surgirem, eles possam _debugar_ seus programas. Sistemas computacionais bem planejados, como automóveis ou reatores nuclares bem planejados, são criados de forma modular, assim as partes podem ser construídas, substituídas, e _debugadas_ separadamente.
Engenheiros de software mestres possuem a habilidade de organizar programas de forma que eles possam estar seguramente certos de que os processos resultantes irão realizar as tarefas intencionadas. Visualizam o comportamento de seus sistemas com antecedência. Sabem como estruturar programas para que problemas não antecipados não levem a consequências catastróficas, e quando os problemas surgirem, eles possam depurar seus programas. Sistemas computacionais bem planejados, como automóveis ou reatores nucleares bem planejados, são criados de forma modular, assim as partes podem ser construídas, substituídas, e depuradas separadamente.

## Programando em JavaScript

Nós precisamos de uma linguagem apropriada para descrever processos, e iremos utilizar para este propósito a linguagem de programação JavaScript. Assim como nossos pensamentos do dia a dia são geralmente expressos em nossa linguagem natural (como Inglês, Francês, Japonês ou o Português), e descrições de fenômenos quantitativos são expressados com equações matemáticas, nossos pensamentos procedurais serão expressos em JavaScript. JavaScript foi desenvolvida no início dos anos 1990 como uma linguagem de programação para controlae os nevagefores da World Wide Web através de _scripts_ incorporados nas páginas da web. A linguagem foi concebida por Brendan Eich, originalmente com o nome Mocha, que depois foi renomeada para LiveScript e finalmente para JavaScript. O nome JavaScript é uma marca registrada da Oracle Corporation.
Nós precisamos de uma linguagem apropriada para descrever processos, e iremos utilizar para este propósito a linguagem de programação JavaScript. Assim como nossos pensamentos do dia a dia são geralmente expressos em nossa linguagem natural (como Inglês, Francês, Japonês ou o Português), e descrições de fenômenos quantitativos são expressados com equações matemáticas, nossos pensamentos procedurais serão expressos em JavaScript. JavaScript foi desenvolvida no início dos anos 1990 como uma linguagem de programação para controlar os navegadores da World Wide Web através de _scripts_ incorporados nas páginas da web. A linguagem foi concebida por Brendan Eich, originalmente com o nome Mocha, que depois foi renomeada para LiveScript e finalmente para JavaScript. O nome JavaScript é uma marca registrada da Oracle Corporation.

A despeito de sua origem como uma liguagem de _script_ para web, JavaScript é uma linnguagem de programação de propósito geral. Um interpretador JavaScript é uma máquina que realiza os processos descritos na linguagem JavaScript. O primeiro interpretador JavaScript foi implementado por Eich na Netscape Communications Corporation, para o navegador da web Netscape Navigator.
A despeito de sua origem como uma linguagem de _script_ para web, JavaScript é uma linguagem de programação de propósito geral. Um interpretador JavaScript é uma máquina que realiza os processos descritos na linguagem JavaScript. O primeiro interpretador JavaScript foi implementado por Eich na Netscape Communications Corporation, para o navegador da web Netscape Navigator.

JavaScript herdou suas características das linguagens de programação Schema e Self. Scheme é um dialeto de Lisp. e foi usada como a linguagem de programação para a versão original deste livro. Do Scheme, JavaScript herdou seus mais fundamentais princípios de design como funções de primeira classe escopadas lexicalmentte e tipagem dinâmica.
JavaScript herdou suas características das linguagens de programação Schema e Self. Scheme é um dialeto de Lisp. e foi usada como a linguagem de programação para a versão original deste livro. Do Scheme, JavaScript herdou seus mais fundamentais princípios de design como funções de primeira classe com escopo lexical e tipagem dinâmica.

JavaScript possui apenas aparência superficial com a linguagem Java, após a qual foi (eventualmente) batizada; tanto Java e JavaScript usam a estrutura de bloco da linguagem C. Em contraste com Java e C, as quais geralmente utilizam compilação para linguagens de baixo nível, programas JavaScript foram inicialmente interpretados pelos navegadores da web. Após o Netscape Navigator, outros navegadores web proveram interpretadores para a linguagem incluindo o Internet Explorer da Microsof, cuja versão do JavaScript foi nomeada JScript. A popularidade do JavaScript para controlar navegadores web culiminou em um esforço para sua padronização, culminando no ECMAScript. A primeira edição do padrão foi liderada por Guy Lewis Steele Jr. e completada em Junho de 1997 (ECMA 1997). A sexta edição, conhecida como ECMAScript 2015, foi liderada por Allen Wirfs-Brock e adotada pela Assembléia Geral da ECMA em Junho de 2015 (ECMA 2015).
JavaScript possui apenas aparência superficial com a linguagem Java, após a qual foi (eventualmente) batizada; tanto Java e JavaScript usam a estrutura de bloco da linguagem C. Em contraste com Java e C, as quais geralmente utilizam compilação para linguagens de baixo nível, programas JavaScript foram inicialmente interpretados pelos navegadores da web. Após o Netscape Navigator, outros navegadores web proveram interpretadores para a linguagem incluindo o Internet Explorer da Microsoft, cuja versão do JavaScript foi nomeada JScript. A popularidade do JavaScript para controlar navegadores web culminou em um esforço para sua padronização, culminando no ECMAScript. A primeira edição do padrão foi liderada por Guy Lewis Steele Jr. e completada em Junho de 1997 (ECMA 1997). A sexta edição, conhecida como ECMAScript 2015, foi liderada por Allen Wirfs-Brock e adotada pela Assembleia Geral da ECMA em Junho de 2015 (ECMA 2015).

A prática de incorporar programas JavaScript em páginas da web encorajou os desenvolvedores de nevagedores web a implementarem interpretadores JavaScript. Assim que foram se tornando mais complexos, esses interpretadores se tornaram mais eficientes em executá-los, eventualmente utilizando implementações sofisticadas como compilação Just-In-Time (JIT). A maioria dos programas JavaScript no momento em que é escrito (2021) são incorporados em páginas da web e interpretados por navegadores, mas JavaScript é cada vez mais utilizada como uma linguagem de programação com propósito geral, usando sistemas com o o Node.js.
A prática de incorporar programas JavaScript em páginas da web encorajou os desenvolvedores de navegadores web a implementarem interpretadores JavaScript. Assim que foram se tornando mais complexos, esses interpretadores se tornaram mais eficientes em executá-los, eventualmente utilizando implementações sofisticadas como compilação Just-In-Time (JIT). A maioria dos programas JavaScript no momento em que é escrito (2021) são incorporados em páginas da web e interpretados por navegadores, mas JavaScript é cada vez mais utilizada como uma linguagem de programação com propósito geral, usando sistemas com o o Node.js.

Entretanto, é a habilidade dos navegadores de executar programas JavaScript que tornam uma linguagem ideal para uma versão online sobre programas de computador. Executar programas ao clicar nas coisas em uma página da web é natural em JavaScript - afinal é exatamente o que JavaScript foi criado para fazer! Mais fundamentalmentte, ECMAScript 2015 possui um conjunto de características que o ttornam um excelenete meio para esttudar importante construtos de programação e estruturas de dados e para relacioná-los com as características linguísticas que os suportam. Suas funções de primeira classe escopadas lexicalmente e seu suporte sintatico através de expressões lambda proveem um acesso direto e conciso para a abstração funcional, e a tipagem dinâmica nos permitem adaptar para se manter próximo ao Scheme originalmente utilizado ao longo do livro. E ainda mais, além de todas estas considerações, programar em JavaScript é uma grande diversão.
Entretanto, é a habilidade dos navegadores de executar programas JavaScript que tornam uma linguagem ideal para uma versão online sobre programas de computador. Executar programas ao clicar nas coisas em uma página da web é natural em JavaScript - afinal é exatamente o que JavaScript foi criado para fazer! Mais fundamentalmente, ECMAScript 2015 possui um conjunto de características que o tornam um excelente meio para estudar importante construtos de programação e estruturas de dados e para relacioná-los com as características linguísticas que os suportam. Suas funções de primeira classe com escopo lexical e seu suporte sintático através de expressões lambda proveem um acesso direto e conciso para a abstração funcional, e a tipagem dinâmica nos permitem adaptar para se manter próximo ao Scheme originalmente utilizado ao longo do livro. E ainda mais, além de todas estas considerações, programar em JavaScript é uma grande diversão.
8 changes: 3 additions & 5 deletions 01/1.1.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Um tipo de instrução que você pode digitar é uma instrução de *expressão*

clicando nela, ele responderá exibindo um interpretador JavaScript com a opção de avaliar a instrução pressionando um botão "Run" (Executar). Clique na instrução da expressão primitiva e veja o que acontece!

Expressões que representam números podem ser combinadas com operadores (como + ou \*) para formar uma expressão composta que representa a aplicação de uma função primitiva correspondente a esses números. Por exemplo, avalie qualquer uma das seguintes instrções de expressão clicando nela:
Expressões que representam números podem ser combinadas com operadores (como + ou \*) para formar uma expressão composta que representa a aplicação de uma função primitiva correspondente a esses números. Por exemplo, avalie qualquer uma das seguintes instruções de expressão clicando nela:

```js
137 + 349;
Expand Down Expand Up @@ -96,8 +96,6 @@ que o interpretador avaliaria prontamente como sendo 57. Podemos nos ajudar escr

para separar visualmente os principais componentes da expressão.

Mesmo com expressões complexas, o interpretador sempre opera no mesmo ciclo básico: ele lê uma instrução digitada pelo usuário, avalia a instrução e imprime o resultado. Este modo de operação é frequentemente expresso dizendo que o interpretador é executado em um *loop de leitura-avaliação-impressão* (também conhecido como REPL). Observe em particular que não é necessário instruir explicitamente o interpretador a imprimir o valor da instrução.<sup>[1](#footnote-1)</sup>
Mesmo com expressões complexas, o interpretador sempre opera no mesmo ciclo básico: ele lê uma instrução digitada pelo usuário, avalia a instrução e imprime o resultado. Este modo de operação é frequentemente expresso dizendo que o interpretador é executado em um *loop de leitura-avaliação-impressão* (também conhecido como REPL). Observe em particular que não é necessário instruir explicitamente o interpretador a imprimir o valor da instrução.[^1]

-----

<a name="footnote-link-1"></a> [1] O JavaScript obedece à convenção de que cada instrução tem um valor (consulte o exercício [4.8](4.1.2#ex-4.8)). Essa convenção, junto com a reputação dos programadores JavaScript de não se preocuparem com a eficiência, nos leva a parafrasear uma piada sobre os programadores Lisp de Alan Perlis (que estava parafraseando Oscar Wilde): *Os programadores JavaScript sabem o valor de tudo, mas o custo de nada.*
[^1]: O JavaScript obedece à convenção de que cada instrução tem um valor (consulte o exercício [4.8](4.1.2#ex-4.8)). Essa convenção, junto com a reputação dos programadores JavaScript de não se preocuparem com a eficiência, nos leva a parafrasear uma piada sobre os programadores Lisp de Alan Perlis (que estava parafraseando Oscar Wilde): *Os programadores JavaScript sabem o valor de tudo, mas o custo de nada.*
4 changes: 2 additions & 2 deletions 01/1.1.3.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ Observe como a ideia de recursão pode ser usada sucintamente para expressar o q

requer que a regra de avaliação seja aplicada a quatro combinações diferentes. Podemos obter uma imagem desse processo representando a combinação na forma de uma árvore, conforme mostrado na figura [1.1](#fig-1.1). Cada combinação é representada por um nó com ramificações correspondentes ao operador e aos operandos da combinação que dele decorrem. Os nós terminais (ou seja, nós sem ramificações derivadas deles) representam operadores ou números. Vendo a avaliação em termos de árvore, podemos imaginar que os valores dos operandos percolam para cima, começando nos nós terminais e depois combinando em níveis cada vez mais altos. Em geral, veremos que a recursão é uma técnica muito poderosa para lidar com objetos hierárquicos semelhantes a árvores. Na verdade, a forma de "filtrar os valores para cima" da regra de avaliação é um exemplo de um tipo geral de processo conhecido como `acumulação de árvore`.

<a name="#fig-1.1"></a>
![#fig-1.1](https://sicp.sourceacademy.org/img_javascript/ch1-Z-G-1.svg)
<a name="fig-1.1"></a>
![fig-1.1](https://sicp.sourceacademy.org/img_javascript/ch1-Z-G-1.svg)

Figura 1.1 Representação em árvore, mostrando o valor de cada subexpressão.

Expand Down
Loading