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:
- Um átomo; ou
- Uma expressão na forma
(head . tail)
ondehead
etail
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).