Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Teste de Prolog Resolvido, Provas de Inteligência Artificial

Resolução de Teste de Prolog para Unidade Curricular de IA.

Tipologia: Provas

2019

Compartilhado em 08/12/2019

Carlos_Neto_Gomes
Carlos_Neto_Gomes 🇵🇹

3 documentos

1 / 5

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
EI(diurno e PL)
ETI (diurno e PL)
IGE (diurno e PL)
Inteligência Artificial 2017-2018
Teste de Prolog. Duração: 1H30
2017/12/21
Todas as perguntas seguem as convenções do Prolog, exatamente como
apresentado e exercitado nas aulas. As respostas devem seguir os
mesmos padrões. Nas tuas respostas não terás de usar nenhum dos
predicados definidos em aulas práticas ou teóricas (e.g., member/2,
select/3, nXList/3). Se decidires usá-los, terás de os definir.
Conceitos e representação
Este teste gira à volta do conceito de evento. Cada evento é representado por dois componentes: o número de
ordem do evento e a sua descrição. Quanto menor for o número de ordem, mais antigo será o evento. A descrição
é um termo Prolog.
Os eventos podem ser representados em factos do predicado event/2 ou como elementos de listas de eventos.
Cada evento numa lista é representado por uma estrutura ev/2 também com dois argumentos.
% Exemplo de evento armazenado num facto
% No evento número 29, a Isabel foi catapultada para a fama
event(29, catapultado(isabel, fama)).
% Exemplo de uma lista com dois eventos
[ev(15, esmagado(xi29)), ev(45, dessintonizado(joao))]
I - Prolog Declarativo
Nesta secção não poderás os mecanismos de controlo e de Input/Output da linguagem Prolog (e.g., cut, repeat/0,
fail/0, assert/1, read/1, write/1). Também não podes usar os predicados da família findall. Em algum ponto de
cada uma das tuas respostas, terás de usar recursividade.
(4 Valores) 1 - Define o predicado event_numbers/2 que recebe uma lista de eventos e produz a lista dos seus
números de ordem. A lista devolvida não tem que ficar ordenada. Não faças validações.
Exemplo
?- event_numbers([ev(29, catapultado(isabel, fama)), ev(15, esmagado(xi29)),
ev(27, enterrado(luis, inferno))], L).
L = [29, 15, 27]
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe Teste de Prolog Resolvido e outras Provas em PDF para Inteligência Artificial, somente na Docsity!

EI(diurno e PL) ETI (diurno e PL) IGE (diurno e PL)

Inteligência Artificial 2017- 2018

Teste de Prolog. Duração: 1H 2017/12/ Todas as perguntas seguem as convenções do Prolog , exatamente como apresentado e exercitado nas aulas. As respostas devem seguir os mesmos padrões. Nas tuas respostas não terás de usar nenhum dos predicados definidos em aulas práticas ou teóricas (e.g., member/2 , select/3 , nXList/3 ). Se decidires usá-los, terás de os definir.

Conceitos e representação

Este teste gira à volta do conceito de evento. Cada evento é representado por dois componentes: o número de ordem do evento e a sua descrição. Quanto menor for o número de ordem, mais antigo será o evento. A descrição é um termo Prolog. Os eventos podem ser representados em factos do predicado event/2 ou como elementos de listas de eventos. Cada evento numa lista é representado por uma estrutura ev/2 também com dois argumentos. % Exemplo de evento armazenado num facto % No evento número 29, a Isabel foi catapultada para a fama event(29, catapultado(isabel, fama)). % Exemplo de uma lista com dois eventos [ev(15, esmagado(xi29)), ev( 45 , dessintonizado(joao))]

I - Prolog Declarativo

Nesta secção não poderás os mecanismos de controlo e de Input/Output da linguagem Prolog (e.g., cut, repeat/0 , fail/0 , assert/1 , read/1 , write/1 ). Também não podes usar os predicados da família findall. Em algum ponto de cada uma das tuas respostas, terás de usar recursividade. ( 4 Valores) 1 - Define o predicado event_numbers/2 que recebe uma lista de eventos e produz a lista dos seus números de ordem. A lista devolvida não tem que ficar ordenada. Não faças validações. Exemplo ?- event_numbers([ev(29, catapultado(isabel, fama)), ev(15, esmagado(xi29)), ev(27, enterrado(luis, inferno))], L). L = [29, 15, 27]

R:

event_numbers([ev(N, )|L1], [N|L2]):- event_numbers(L1, L2). event_numbers([], []). ( 4 Valores) 2 - Define o predicado valid_events_list/1 que verifica, em primeiro lugar, se recebe uma lista. Além disso, verifica se cada um dos eventos da lista, se os houver, é um evento válido. Imagina, para isso, que tens já implementado o predicado is_event/1 que tem sucesso se o seu argumento for um evento válido._ Exemplo ?- valid_events_list([ev(29, catapultado(isabel, fama)), ev(15, esmagado(xi29)), ev(27, enterrado(luis, inferno))]). True ?- valid_events_list([]). True ?- valid_events_list([1, ev(15, esmagado(xi29))]). False R: valid_events_list(L):- is_list(L), valid_e_list(L). valid_e_list([E|L]):- is_event(E), valid_e_list(L). valid_e_list([]). ( 4 Valores) 3 - Define o predicado initial_event_number/2 que recebe uma lista de eventos possivelmente desordenada, e devolve o número de ordem do evento mais antigo. Não faças validações. Exemplo: ?- initial_event_number([ev(29, catapultado(isabel, fama)), ev(15, esmagado(xi29)), ev(27, enterrado(luis, inferno))], Number). Number = 15

R:

tell_events(N1, N2):- event(N, D), N >= N1, N =< N2, proptext(event(N, D), Text), write(Text), nl, fail. tell_events(_, ). ( 4 Valores) 5 - Escreve o procedimento store_events/0 que regista ( assert/1 ), em factos event/2 , eventos especificados pelo utilizador através do teclado. Por cada evento, é pedida apenas a sua descrição computacional. O número de ordem é gerado sequencialmente pelo programa. Quando, em vez da descrição de um evento, o utilizador introduz a palavra end , o processo termina. Ao terminar, o programa deve manter os factos com os eventos, mas deve apagar toda a restante informação criada temporariamente em memória. Exemplo ?- store_events. Description (or end): esmagado(ix200). Description (or end): aparafusado(rita, c606). Description (or end): end. ?- event(N, D). N = 1 D = esmagado(ix200); N = 2 D = aparafusado(rita, c606); False Não faças validações. Nota: ADMITE PARA SIMPLIFICAR QUE, SEMPRE QUE SE INICIA A EXECUÇÃO DO PROGRAMA, NÃO EXISTEM EVENTOS JÁ ARMAZENADOS. ASSIM SENDO, O PRIMEIRO EVENTO DEVE SER O NÚMERO 1. R: store_events:- assert(event_number( 1 )), repeat, read_event(D), process_event(D), !, retract(event_number()). read_event(D):- write(‘Description (or end): ‘), read(D).

process_event(end):- !. process_event(D):- retract(event_number(N)) assert(event(N, D)), N1 is N + 1, assert(event_number(N1)), !, fail.