A seguir, demonstraremos alguns exemplos de código feito em Majestic Lisp. Os exemplos visam abranger conceitos recorrentes na programação. Estes programas também podem ser utilizados para testar a programação de um interpretador de Majestic, que será criado ao longo desse livro.
Os exemplos a seguir foram selecionados por serem mais compactos. Para exemplos mais extensos de código, veja o Apêndice B.
Numerais de Church são ferramentas interessantes para falarmos a respeito de computabilidade. Em suma, usando lambda calculus (CHURCH, 1936), é possível criarmos representações para números naturais usando nada mais que a ideia de descrição e aplicações de funções.
Majestic, Lisps em geral e o paradigma de programação funcional
relacionam-se intimamente com as ideias de Alonzo Church. Nesse
sentido, uma das possibilidades de Majestic é a implementação de tais
numerais, bem como algumas funções auxiliares (succ
, que calcula o
sucessor de um número; add
, que calcula a soma de dois números).
A implementação das funções auxiliares é um tópico de atenção extra para este exemplo, pois seu uso demonstra como a aplicação parcial de uma função pode ajudar nessas declarações.
O estilo de passagem de continuações é uma forma de programação que
envolve modificar o controle de fluxo da aplicação, de forma que a
interpretação de certos predicados (como ocorre em if
e cond
) estejam
relacionados à execução de certas funções, ao invés da execução de
meras expressões como consequência.
Esse estilo de programação é particularmente útil em situações onde operações são executadas de forma concorrente.
O exemplo a seguir não trabalha com operações concorrentes, mas realiza uma demonstração do estilo de passagem de continuações.
O algoritmo a seguir é uma implementação do algoritmo para verificação de esquemas de equações de palavras do algoritmo de Makhanin (ABDULRAB, 1992). Trata-se de um algoritmo particularmente útil para testes de performance do interpretador.
[cite/n:@abdulrab1992; @church36a]