Baixe o app para aproveitar ainda mais
Prévia do material em texto
Avisos • Hoje é o último dia para entregar foto selfie; • Dia 15/08 é feriado (Padroeira de São Carlos) portanto não haverá aula; • Devido à SEMCOMP a aula do dia 18/08 será substituída por uma atividade que será postada no TIDIA 4.0. – Você deve escolher uma atividade da SEMCOMP que participou, escrever um breve resumo do que foi apresentado e como você pode relacionar essa atividade com InteligênciaArtificial. • Dia 22/08 será nossa próxima aula em sala. Aula Passada 2 5 1 8 8 10 6 5 1 2 1 1 2 1 1 1 0 1 2 3 4 5 6 8 9 11 12 13 14 15 17 26 RESULTADO DO EXERCÍCIO PARA MANTER O FOCO Recuperações de foco Mediana: 5 Média: 6.02 Desvio Padrão: 4.75 Aula Passada • Programação Lógica – Algoritmo = Lógica + Controle – Programa = Lógica + Controle + Estruturas de Dados • Programar em Prolog envolve: – declarar alguns fatos a respeito de objetos e seus relacionamentos – definir algumas regras sobre os objetos e seus relacionamentos e – fazer perguntas sobre os objetos e seus relacionamentos Aula Passada • Controle de programa – Ordenar cláusulas e metas – Uso da busca em profundidade – Operadores E (,) e OU (;) – Evite o uso de OU (;) (por quê?) – Backtracking – Corte (!) – Cuidado ao utilizar – Corte verde e vermelho – Significado do corte. p :- a,!,b. p :- c. Objetos em Prolog Solange Rezende §Esta aula introduz objetos de dados simples e estruturados §Os tópicos abordados são: §Objetos simples (átomos, números, variáveis) §Objetos estruturados §Unificação como operação fundamental em objetos Objetos em Prolog Objetos (Termos) Objetos Simples Constantes (Atômicos) Átomos Números Variáveis Estruturas Átomos • São cadeias compostas pelos seguintes caracteres: – letras maiúsculas: A, B, ..., Z – letras minúsculas: a, b, ..., z – dígitos: 0, 1, ..., 9 – caracteres especiais: + - * / < > = : . & _ ~ • Podem ser construídos de três maneiras: – cadeias de letras, dígitos e o caractere ‘_’, começando com uma letra minúscula: anna, nil, x25, x_25, x_25AB, x_, x__y, tem_filhos, tem_um_filho – cadeias de caracteres especiais: <--->, =====>, ..., .:., ::= – cadeias de caracteres entre apóstrofos: ‘Abraão’, ‘América_do_Sul’, ‘América_Latina’ Números • Números usados em Prolog incluem números inteiros e números reais Operadores Aritméticos Predicado pré-definido is adição + subtração - multiplicação * divisão / divisão inteira // resto divisão inteira mod potência ** atribuição is Operadores Relacionais X > Y X é maior do que Y X < Y X é menor do que Y X >= Y X é maior ou igual a Y X =< Y X é menor ou igual a Y X =:= Y X é igual a Y X = Y X unifica com Y X =\= Y X é diferente de Y Números • O operador = tenta unificar apenas – ?- X = 1 + 2. X = 1 + 2 • O operador is força a avaliação aritmética – ?- X is 1 + 2. X = 3 • Se a variável à esquerda do operador is já estiver instanciada, Prolog apenas compara o valor da variável com o resultado da expressão à direita de is – ?- X = 3, X is 1 + 2. X = 3 – ?- X = 5, X is 1 + 2. no Comparação: Aritmética e Prolog 2 + 3 = 5 3 x 4 = 12 5 – 3 = 2 3 – 5 = -2 4 : 2 = 2 1 é o resto quando 7 é dividido por 2 ?- 5 is 2+3. ?- 12 is 3∗4. ?- 2 is 5-3. ?- -2 is 3-5. ?- 2 is 4/2. ?- 1 is mod(7,2). Aritmética Prolog Exemplos com o predicado is ?- 10 is 5+5. yes ?- 4 is 2+3. no ?- X is 3 ∗ 4. X=12 yes ?- R is mod(7,2). R=1 yes Usando o operador = (unificação) ?- X = 3 + 2. X = 3+2 yes ?- 3 + 2 = X. X = 3+2 yes ?- Usando o predicado is/2 ?- X is 3 + 2. X = 5 yes ?- 3 + 2 is X. ERROR: is/2: Argumentos não estão instanciados corretamente ?- Resultado is 2+2+2+2+2. Resultado = 10 yes ?- Definição de Predicados Aritméticos ad-tres-e-dobra(X, Y):- Y is (X+3) ∗ 2. Definição de Predicados Aritméticos ad-tres-e-dobra(X, Y):- Y is (X+3) ∗ 2. ?- ad-tres-e-dobra (1,X). X=8 yes ?- ad-tres-e-dobra (2,X). X=10 yes Variáveis • São cadeias de letras, dígitos e caracteres ‘_’, sempre começando com letra maiúscula ou com o caractere ‘_’ – X, Resultado, Objeto3, Lista_Alunos, ListaCompras, _x25, _32 • O escopo de uma variável é local, ou seja, é dentro de uma mesma regra ou dentro de uma pergunta – Isto significa que se a variável X ocorre em duas regras/perguntas, então são duas variáveis distintas. A ocorrência de X dentro de uma mesma regra/pergunta significa a mesma variável Variáveis • Uma variável pode estar: – Instanciada: quando a variável já referencia (está unificada a) algum objeto – Livre ou não-instanciada: quando a variável não referencia (não está unificada a) um objeto, ou seja, quando o objeto a que ela referencia ainda não é conhecido • Uma vez instanciada, somente Prolog pode torná-la não instanciada por meio de seu mecanismo de inferência (não o programador) Variável Anônima • Quando uma variável aparece em uma única cláusula, não é necessário utilizar um nome específico para ela • Utiliza-se a variável anônima, que é escrita com um simples caracter ‘_’. • Por exemplo: temfilho(X) :- progenitor(X,Y). – Para definir temfilho, não é necessário o nome do filho(a) – Assim, é o lugar ideal para a variável anônima: • temfilho(X) :- progenitor(X,_). Variável Anônima • Cada vez que um underscore ‘_’ aparece em uma cláusula, ele representa uma nova variável anônima • Por exemplo: – alguem_tem_filho :- progenitor(_,_). equivale à: – alguem_tem_filho :- progenitor(X,Y). que é bem diferente de: – alguem_tem_filho :- progenitor(X,X). • Quando utilizada em uma pergunta, seu valor não é mostrado. Por exemplo, se queremos saber quem tem filhos mas sem mostrar os nomes dos filhos, podemos perguntar (do programa da família): ?- progenitor(X,_). Exemplo • Dado um grupo de pessoas: sejam Raul, Maria, Bruno, Ricardo e Julia que realizam trabalhos semelhantes, é necessário determinar possíveis grupos de trabalho para realizar um determinado projeto. • O supervisor está interessado em agrupá-los tendo em conta, sempre que possível, as afinidades entre os membros do grupo. • Ele sabe de alguns fatos: – Raul e Maria preferem trabalhar com colegas do sexo oposto, enquanto que Julia não e para Ricardo é indiferente. – é sabido que Ricardo e Bruno não se entendem trabalhando juntos. Exemplo • Dado um grupo de pessoas: sejam Raul, Maria, Bruno, Ricardo e Julia que realizam trabalhos semelhantes, é necessário determinar possíveis grupos de trabalho para realizar um determinado projeto. O supervisor está interessado em agrupá-los tendo em conta, sempre que possível, as afinidades entre os membros do grupo. Ele sabe de alguns fatos: -- Raul e Maria preferem trabalhar com colegas do sexo oposto, enquanto que Julia não e para Ricardo é indiferente. -- é sabido que Ricardo e Bruno não se entendem trabalhando juntos. q Programa Prolog homem('Raul'). homem('Bruno'). homem('Ricardo'). mulher('Maria'). mulher('Julia'). possivel('Raul',Alguem) :- mulher(Alguem). possivel('Maria',Fulano) :- homem(Fulano). possivel('Julia',Ciclana) :-mulher(Ciclana). possivel('Ricardo', Alguem) :- mulher(Alguem). possivel('Ricardo', Fulano) :- homem(Fulano), Fulano \= ‘Bruno'. possivel_dupla(X,Y):-possivel(X,Y), possivel(Y,X), X\=Y. Propriedades: simétrica, reflexiva e transitiva q Simétrica – irm(pedro, paula). % É necessário “ensinar”a propriedade irmaos(X,Y) :- irm(X,Y). irmaos(X,Y) :- irm(Y,X). q Reflexiva: o objeto em relação a si próprio igual(X,X). q Transitiva: mais_alto_1(joao, maria). mais_alto_1(pedro, raul). mais_alto_1(joao, pedro). mais_alto(Fulano,Ciclano) :-mais_alto_1(Fulano,Ciclano).mais_alto(Fulano,Ciclano) :-mais_alto_1(Fulano,Alguem), mais_alto(Alguem,Ciclano). Objetos em Prolog Objetos (Termos) Objetos Simples Constantes (Atômicos) Átomos Números Variáveis Estruturas Slides baseados em: Bratko, I.; Prolog Programming for Artificial Intelligence, 3rd Edition, Pearson Education, 2001. Clocksin, W.F.; Mellish, C.S.; Programming in Prolog, 5th Edition, Springer-Verlag, 2003. Programas Prolog para o Processamento de Listas e Aplicações, Monard, M.C & Nicoletti, M.C., ICMC-USP, 1993. Material elaborado por José Augusto Baranauskas + adições de Maria Carolina Monard + adições de Solange Oliveira Rezende
Compartilhar