FLORID: Predicados built-in Departamento de Informática UFPE Jeferson Valadares 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 t ?- jacob Y)->Z], Y<=3 ¤retorna os três primeiros filhos de jacob operações aritméticas t 3 +3 * 2 ¤espaços não são opcionais t ?- jacob 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 t ?- 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 t ?- strlen (X, 40). t ?- 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 t ?- strcat (“a”, “b”, X). X/ “ab” t ?- strcat (“a”, Y, “ab”). Y/”b” t 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 t ?- 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 t ?- match (“linux98”, ”\([0-9]\)\([0-9]\)”, “\2swap\1”, X). X\”8swap9” t retorna sem formatação se arg3 for a cadeia vazia (“”) t 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 [G 1,...,G n ]; b} t ?- Z = max {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 “ seria o id-term de um objeto da classe url * Método get para recuperar o documento: “ ] 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; url; error =>>string].
Consultando a web * Exemplo: “ = ourUrl. ourUrl:url. ourServer = “ X.get:ourPage :- X: ourUrl. Y.get:ourPage :- _ ) ->> Y], substr(ourServer, Y). t Recupera os links que estão no mesmo servidor _ ) ->> Y], substr(“mailto:”,Y). t Recupera todos os endereços de achados nas páginas visitadas
Consultando a web * ?- X:ourPage[error ->> Y]. Detecta links perdidos ou documentos não-processados * ?- ]. 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; _ ) ->>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ão- herdá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