FLORID:
Predicados built-in
Departamento de Informática
UFPE
Jeferson Valadares
([email protected])
Recife, fevereiro de 1999
Roteiro

Igualdade semântica
Aritmética
Cadeias de caracteres e expressões regulares

Agregação

Interface para web

FLORID x LIFE

FLORID x linguagens de programação orientada a
objetos


Igualdade e Aritmética

Igualdade entre objetos:
• abram = abraham.

Objetos inteiros:
• operadores de comparação usuais

?- jacob [son@(X, Y)->Z], Y<=3
¤ retorna os três primeiros filhos de jacob
• operações aritméticas

3 +3 * 2
¤ espaços não são opcionais

?- jacob [son@(X,A)->Z1; son@(X,B)->Z2; son@(X,C)->Z3],
B = A + 1, C = A + 2
¤ verdadeiro se jacob tiver tido três filhos consecutivos com a mesma
mulher
Cadeias de caracteres

strlen(arg1, arg2)
• verdadeiro se arg2 for o tamanho da cadeia arg1

?- strlen (“logic”, X).
• Também pode ser usado para recuperar cadeias de determinados
tamanhos, mas as possíveis cadeias têm que estar ligadas à
outras moléculas no corpo da regra


?- strlen (X, 40).
?- strlen (X, 4), substr (X, “avião”).
Cadeias de caracteres

strcat (arg1, arg2, arg3)
• verdadeiro se arg3 for o resultado da concatenação de arg1 e
arg2



?- strcat (“a”, “b”, X).
X/ “ab”
?- strcat (“a”, Y, “ab”).
Y/”b”
Nunca mais de uma variável livre!
Cadeias de caracteres

substr (arg1, arg)
• verdadeiro se arg1 for uma sub-cadeia de arg2
• não-sensível ao caso

?- substr (“DaTA”, “database”).
true
• um objeto representando um documento web também pode ser
usado em arg2. Neste caso o predicado retorna true se arg1
estiver presente no documento
Cadeias de caracteres e expressões
regulares

match (arg1, arg2, arg3, arg4)
• procuram todas as sub-cadeias de arg1 que casam com a
expressão regular em arg2; arg3 é uma cadeia de formato
descrevendo como as cadeias casadas devem ser retornadas em
arg4



?- match (“linux98”, ”\([0-9]\)\([0-9]\)”, “\2swap\1”, X).
X\”8swap9”
retorna sem formatação se arg3 for a cadeia vazia (“”)
sintaxe de expressões regulares igual à do emacs
Agregação


Operadores usuais estão implementados: max, min, count,
sum
Operadores de agregação na forma:
• agg{X [G1,...,Gn]; b}

?- Z = max {X; john[salary@(Year)->X], Year <1990}.
Interface para web


Visão abstrata da web como um grafo direcionado
rotulado onde os nós representam documentos e os
vértices rotulados são providos pelos hyperlinks
Ao contrário de SQL, linguagens para BDDs são capazes
de examinar caminhos de tamanho arbitrário em um grafo
-como a estrutura da web é desconhecida a princípio,
esta é uma característica importante para acesso à web
Modelando a web

Classe url modela um documento como um objeto
• “http://www.di.ufpe.br/~compint/” seria o id-term de um objeto
da classe url

Método get para recuperar o documento:
• “http://www.di.ufpe.br/~compint/”.get[ ]
• get transforma uma página HTML em um objeto webdoc

Documentos recuperados têm a seguinte estrutura:
• url::string [get =>webdoc]
• webdoc[self =>url; author =>string; modif => string; type =>string;
hrefs@(string)=>> url; error =>>string].
Consultando a web

Exemplo:
•
•
•
•
•
“http://www.di.ufpe.br/~compint” = ourUrl.
ourUrl:url.
ourServer = “www.di.ufpe.br/”.
X.get:ourPage :- X: ourUrl.
Y.get:ourPage :- X:ourPage[hrefs@( _ ) ->> Y], substr(ourServer,
Y).

Recupera os links que estão no mesmo servidor
• X:ourPage[hrefs@( _ ) ->> Y], substr(“mailto:”,Y).

Recupera todos os endereços de e-mail achados nas páginas visitadas
Consultando a web

?- X:ourPage[error ->> Y].
• Detecta links perdidos ou documentos não-processados

?- sys.prn.style@(“html”)[ ].
• Seleciona um tipo especial de saída que direciona todos os
resultados de consultas para um arquivo HTML e chama o
netscape para visualização
Limitando a busca


Para se limitar a busca no grafo, pode-se limitar a
profundidade da busca
Por exemplo, todas as páginas a partir do início em quatro
movimentos:
• X.get:ourPage[depth->>0] :- X:ourUrl
• Y.get:ourPage[depth->>N] :-X:ourPage[depth ->> M;
hrefs@( _ ) ->>Y; N = M +1, N <4.
FLORID x LIFE

Pontos em comum:
• integração de orientação a objetos com regras
• -term é bem semelhante a uma mólecula-F (a não ser pelos
métodos não-herdáveis)

Diferenças:
• FLORID: encadeamento progressivo (dirigido pelos dados)
• LIFE: encadeamento regressivo (dirigdo pelos objetos)
FLORID x LIFE

Vantagens de FLORID sobre
LIFE
• distinção classe/objeto
• herança (método herdável/nãoherdável
• atributo de classe
• interface web built-in
• regra mólecula-F :- mólecula-F;
em life não há regra do tipo
-term :- -term, só
pred(-term) :- pred(-term)
• igualdade semântica
• agregação

Vantagens de LIFE sobre
FLORID
• interface socket built-in
• interface x-windows built-in
• paradigma funcional
(conhecimento inerentemente
procedimental)
• sem limitação sobre regras
recursivas e ocorrência de
variáveis livres (fatos
universais)
• acesso a dados persistentes
FLORID x Linguagens orientadas a objeto

Vantagens de FLORID:
• Capacidade de inferência
• Modelo de dados bem definido
• Fundamentos bem formalizados
Download

florid3 - Centro de Informática da UFPE