Sobre Linguagens

Qualquer notação usada para dar instruções pode ser considerada uma linguagem de programação (Schmidt).

Talvez pela familiaridade com a área e a base formal já existente, a maioria das linguagens de programação de uso geral (incluindo Scheme) se baseia em computar funções matemáticas através de expressões. O mecanismo principal se baseia na "coincidência" de que a expressão que descreve o valor de uma função pode ser interpretada como um procedimento para computar aquele valor (Abelson e Sussman, 1968).

Por exemplo, tendo uma função polinomial expressa em "matematiquês":

\[ x^2 - x - 1 \]

Podemos expressá-la com caracteres padrão em alguma linguagem (por acaso a notação abaixo é código válido de Octave, provavelmente o sendo em mais uma série de outras linguagens):

x ^ 2 - x - 1

Um polinômio equivalente na notação pré-fixada de Lisp seria

(+ (^ x 2) (- x) -1)

Sintaxe e Semântica

Programas devem ser escritos para que pessoas possam os ler, e apenas incidentalmente para que máquinas os executem (Abelson e Sussman, 1968).

A notação das expressões de uma linguagem específica é dita a sua sintaxe; e mesmo que esse tópico não nos interesse no escopo deste minicurso, começamos falando sobre sintaxe pois apenas expressões sintaticamente corretas possuem semântica, ou seja, significado, associado a elas.

Mais importante ainda, falamos da sintaxe de Scheme para destacar seu minimalismo: ela é composta essencialmente pelas chamadas expressões simbólicas (sexprs), cada uma delas caracterizando uma árvore binária, podendo ser:

  1. Um átomo; ou
  2. Uma expressão na forma (head . tail) onde head e tail são sexprs.

Pragmática

Aos prospectivos utilizadores de uma linguagem de programação interessa mais um outro elemento: a pragmática, ou seja, os aspectos práticos da linguagem que a tornam útil para alcançar um conjunto de possíveis objetivos (Cameron).

Neste minicurso será dado enfoque especial à aplicações matemáticas de Scheme como linguagem de programação funcional, onde a principal forma de abstração é encontrada na manipulação de funções.

Metalinguagem

Por último, mas não menos importante, temos a ferramenta com a qual falamos sobre uma linguagem, descrevemos suas características e discutimos suas aplicações: a metalinguagem que lhe cabe.

Mais adiante veremos que é possível empregar Scheme como uma linguagem de programação de uso geral que não é especialmente adequada a resolver nenhuma classe de problemas; em vez disso, seu maior potencial está na capacidade de construir e embarcar em si mesma a linguagem mais apta para fazê-lo através de abstrações metalinguísticas (Abelson e Sussman).