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