Você está na página 1de 8

UNIVERSIDADE FEDERAL DE ALAGOAS

Bruno Carlos Monteiro

ALF

MACEIÓ
2019
BRUNO CARLOS MONTEIRO

ALF

Trabalho acadêmico parcial de nota


da disciplina de Paradigmas de
Linguagem de programação sob
orientação do professor Alcino
Dall’Igna Júnior..

MACEIÓ
2019
1 Introdução

ALF (Algebraic Logic Functional programming language) é uma linguagem de


programação que combina técnicas de programação lógica e funcional. Sua base é a lógica
da cláusula Horn com igualdade que consiste em predicados e cláusulas Horn para
programação lógica e funções e equações para programação funcional.
O ALF foi projetado para ser uma integração genuína de ambos os paradigmas de
programação e, assim, qualquer expressão funcional pode ser usada em uma meta literal, e
predicados arbitrários podem ocorrer em condições de equações.
Como o Prolog, o ALF usa uma estratégia de ​backtracking c​ orrespondente a uma
pesquisa em profundidade na árvore de derivação. Os programas ALF são compilados em
instruções de uma máquina abstrata baseada na ​Warren Abstract Machine (WAM) com
várias extensões para implementar o estreitamento e a reescrita. O emulador para
programas A-WAM é escrito em C.
Um programa ALF é uma coleção de módulos, incluindo um módulo principal que
contém uma sequência de metas a serem provadas.
A seguir, queremos definir uma função que classifica uma lista de números pelo
algoritmo de classificação de inserção. No começo devemos definir os tipos de dados
elementares. Portanto, nosso primeiro módulo básico contém a definição de números
naturais. Seguindo o espírito de especificações algébricas, números naturais são
construídos pela constante 0 e um sucessor função. Além disso, este módulo define uma
função de adição em números naturais e um predicado para comparar números naturais.

A função de adição + é definida por duas equações e o predicado de comparação <


é definido por duas Cláusulas Horn como nas linguagens lógicas.
Em seguida, definimos nosso segundo tipo de dados elementares “listas sobre
elementos de um tipo arbitrário”. Neste módulo é usado a notação Prolog para listas, que é
uma característica pré-definida de ALF.
O tipo dos elementos da lista é um parâmetro para este módulo, ou seja, list é um
módulo genérico. Ele exporta os construtores de lista [] e '.', uma função para concatenar
duas listas e um predicado de membro em listas.

2 Sintaxe de ALF

A sintaxe do ALF é semelhante à sintaxe do Prolog, com construções adicionais para


declarações de tipo e módulo. Utiliza-se as seguintes notações nas regras gramaticais:
Terminais são seqüências de caracteres incluídas em apóstrofos.
{···} denota uma repetição (possivelmente vazia),
[···] denota uma parte opcional,
··· | · · · marca escolhas.
2.1 Restrições sintáticas

Programas ALF sintaticamente corretos devem satisfazer as seguintes condições:


● Dentro de átomos citados, todos os caracteres ASCII são permitidos. Para incluir a
citação em si, tem que ser dobrado, por exemplo: ​'that''s a quoted atom'​.
● Espaços em branco são permitidos em posições arbitrárias no programa exceto:
dentro de átomos, números e variáveis não citadas, entre o ​functor ​e o parêntese
aberto e após o ponto final, se não estiver sendo utilizado como final da sentença,
devendo ser seguido por um espaço em branco.
● Comentários são feitos usando %. Ou então utilizando /* e */, sendo que tudo que
estiver entre eles se torna um comentário.
● Existem palavras reservadas em ALF que não podem ser utilizadas para definir
novos operadores. Como exemplo de palavras reservadas temos:

datatype end export for func

infix infixleft infixnot infixright module

onlynarrow onlyrewrite partial postfix pred

prefix rules use with ,

; = -> :- ?-

3 Listas e operadores

As listas em ALF são representadas por ‘.’ onde o primeiro argumento é o primeiro
elemento da lista e o segundo argumento é o resto da lista. Lista vazia é representada pela
constante [].
Como listas são objetos comumente utilizados, existem algumas notações
alternativas, como mostrado na tabela a seguir:

3.1 Exemplos

3.1.1 Números naturais

​ efinindo
Neste exemplo temos a definição de módulo básico de ALF, o ​nats, d
números naturais, duas funções e um predicado sobre os naturais:
A comutatividade da adição e da multiplicação são usadas apenas no rewriting.

3.1.2 Listas polimórficas

​ o qual contém a definição de lista de


Neste exemplo temos o módulo básico ​list n
elementos de um tipo arbitrário:
3.1.3 Pilhas

O módulo seguinte define pilha(​stack​) como um tipo arbitrário. A função ​pop e


​ ​top
são parciais, pois não são redutíveis no termo de argumento vazio

Você também pode gostar