Prolog/Introdução ao Prolog: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Albmont (discussão | contribs)
Albmont (discussão | contribs)
m Tipos de dados (copy and paste da Wikipedia)
Linha 49:
 
halt.
 
== Tipos de Dados ==
== Tipos de dados ==
Prolog não emprega [[tipos de dados]] do mesmo modo que as linguagens de programação mais comuns normalmente fazem. Todos os dados são tratados como sendo de um único tipo, '''Termo''', cuja natureza depende da forma como esse termo foi declarado. Ou seja, os elementos léxicos utilizados na sua declaração determinam se esse termo será um número, um texto, uma variável, uma estrutura complexa e assim por diante.
 
===Escopo dos identificadores=== <!-- conteudo acrescentado -->
Com exceção de átomos numéricos, funções ou predicados construídos, os nomes em Prolog para constantes, variáveis, funções e predicados, não têm nenhum significado intrínseco e podem ser escolhidos livremente pelo programador. Em geral, duas notações distintas denotarão ou serão objetos distintos. Como em qualquer linguagem de programação, a cada nome deve ser dado um escopo.
 
Em Prolog, as regras de escopo são:
* O escopo de uma variável é a asserção (fato, regra, ou consulta) na qual aparece.
* O escopo de qualquer outro nome (constante, nome de função, ou nome de predicado) é todo o programa.
 
Isto significa que um nome de variável pode ser utilizado e reutilizado a vontade no programa para denotar variáveis diferentes, enquanto qualquer outra notação representa, ou é, o mesmo objeto para o programa todo.
<!-- fim do conteudo acrescentado -->
 
=== Átomos ===
As constantes de texto são introduzidas por meio de átomos. Um átomo é uma seqüência constituída de letras, números e [[underscore]], mas iniciando com uma letra minúscula. Se um átomo não alfanumérico é necessário, pode-se usar qualquer seqüência entre aspas simples (ex: 'um átomo contendo espaços').
 
Um átomo pode ser definido das seguintes maneiras:
 
começando com letra minúscula:
pedro henrique_iv
 
como uma sequência de caracteres entre aspas simples:
'quem é você?' 'eu não sei'.
 
=== Números ===
Um número é uma seqüência de dígitos, permitindo também os sinais de '''.''' (para números reais), '''-''' (número negativo) e '''e''' ([[notação científica]]). Algumas implementações do Prolog não fazem distinção entre inteiros e números reais.
 
exemplos:
321 3.21
 
 
=== Variáveis ===
Variáveis são declaradas da mesma forma que átomos, porém iniciando com uma letra maiúscula ou underscore. No ambiente Prolog uma variável não é um [[container (programação)|contêiner]] cujo valor pode ser atribuído (como ocorre nas [[Programação imperativa|linguagens imperativas]]). Seu comportamento é mais próximo de um padrão, que é incrementalmente especificado pela [[unificação]]. Em outras palavras, uma variável Prolog é como uma incógnita, cujo valor é desconhecido a princípio mas, após descoberto, não sofre mais mudanças.
 
Um tipo especial de variável, a ''variável anônima'' (explicada mais adiante), é uma expressão que significa 'qualquer variável', e é escrita como um único subtraço (_).
 
exemplos:
X Nome Rei_da_Espanha
 
 
=== Termos compostos ===
Termos compostos são a única forma de se expressar estruturas de dados complexas em Prolog. Um termo composto consiste de uma cabeça, também chamada funtor (que é obrigatoriamente um átomo) e parâmetros (de quaisquer tipos) listados entre parênteses e separados por vírgulas.
 
O número de parâmetros, chamado [[aridade]] do termo, é significativo. Um termo é identificado por sua cabeça e aridade, normalmente escrita como funtor/aridade. Átomos e números também podem ser identificados dessa forma, como um termo de aridade zero (ex: um_atomo/0).
 
=== Listas ===
Uma lista não é um tipo de dados à parte, mas sim definida por uma construção recursiva (usando o termo '.'/2):
 
# o átomo [] é uma lista vazia;
# se ''T'' é uma lista e ''H'' é um elemento, então o termo '.'(''H'', ''T'') é uma lista.
O primeiro elemento, chamado cabeça, é ''H'', que é seguida pelo conteúdo do restante da lista, ''T'', também chamado de cauda.
A lista [1, 2, 3] seria representada internamente como '.'(1, '.'(2, '.'(3, []))).
Um atalho sintático é [''H'' | ''T''], que é mais usado para construir regras.
Uma lista pode ser processada como um todo processando o primeiro elemento, e em seguida o restante da lista, de forma [[Recursividade|recursiva]].
 
Para conveniência do programador, as listas podem ser construídas e destruídas de várias formas.
 
* Enumerando os elementos: [abc, 1, f(X), ''Y'', g(''A'',rst)]
* Precedendo-a com um elemento: [abc | ''L1'']
* Precedendo-a com múltiplos elementos: [abc, 1, f(X) | ''L2'']
* Expandindo o termo: '.'(abc, '.'(1, '.'(f(X), '.'(''Y'', '.'(g(''A'',rst), [])))))
* O predicado '''append'''
 
=== Strings ===
Strings são normalmente escritas como uma seqüência de caracteres entre aspas. É comum serem representadas internamente como listas de códigos de caracteres, em geral utilizando a codificação local ou [[Unicode]], se o sistema dá suporte a Unicode. O ISO Prolog também permite que strings sejam representadas por uma lista de átomos com um único caractere.
 
 
[[Categoria:Prolog]]