O programa deve estar baseado no banco de dados com informações de vôos abaixo, onde timetable(Place1,PLace2,List_of_flights) representa a informação sobre cada vôo com Place1 sendo origem, Place2, destino, e List_of_flights, uma lista contendo informações sobre cada vôo estruturada da seguinte forma: hora de saída/hora de chegada/número do vôo/lista de dias.
timetable(edinburgh,london, [ 9:40/10:50/ba4733/alldays, 13:40/14:50/ba4773/alldays, 19:40/20:50/ba4833/[mo,tu,we,th,fr,su]]). timetable(london,edinburgh, [ 9:40/10:50/ba4732/alldays, 11:40/12:50/ba4752/alldays, 18:40/19:50/ba4822/[mo,tu,we,th,fr]]). timetable(london,ljubljana, [13:20/16:20/ju201/[fr], 13:20/16:20/ju213/[su]]). timetable(london,zurich, [ 9:10/11:45/ba614/alldays, 14:45/17:20/sr805/alldays]). timetable(london,milan, [ 8:30/11:20/ba510/alldays, 11:00/13:50/az459/alldays]). timetable(ljubljana,zurich, [11:30/12:40/ju322/[tu,th]]). timetable(ljubljana,london, [11:10/12:20/yu200/[fr], 11:25/12:20/yu212/[su]]). timetable(milan,london, [ 9:10/10:00/az458/alldays, 12:20/13:10/ba511/alldays]). timetable(milan,zurich, [ 9:25/10:15/sr621/alldays, 12:45/13:35/sr623/alldays]). timetable(zurich,ljubljana, [13:30/14:40/yu323/[tu,th]]). timetable(zurich,london, [ 9:00/9:40/ba613/[mo,tu,we,th,fr,sa], 16:10/16:55/sr806/[mo,tu,we,th,fr,su]]). timetable(zurich,milan, [ 7:55/8:45/sr620/alldays]).
Seu problema principal é encontrar rotas exatas entre duas cidades num determinado dia da semana. A rota pode ser programada como: route(Place1,Place2,Day,Route), que satisfaz os seguintes critérios:
A rota deve estar estruturada numa lista da seguinte forma: From-To:número do vôo:Tempo de partida.
Você vai precisar também dos seguintes predicados auxiliares:
Escreva um programa em Prolog, utilizando a informação dada, que responda às perguntas apresentadas acima.
Escreva o mesmo programa utilizando uma linguagem (imperativa/procedural) da sua escolha.
Defina o restante da gramática (frases verbais, complementos) e um dicionário de palavras (verbos, nomes, adjetivos, etc) e utilize o conjunto de frases da Figura 2 para testar seu programa. Atenção aos apóstrofes que devem ser utilizados quando as palavras nas frases começam com letra maiúscula!
Faça uma pequena modificação no seu programa para que este retorne a estrutura gramatical das frases analisadas. Por exemplo, a consulta sentenca(X,['A',vida,corre],[]) deveria retornar na variável X o valor:
sent(frase_nom(artigo('A'),substantivo(vida)),frase_verbal(verbo(corre))).
Observe que a frase do conjunto de exemplos corretos ``O sino bateu na menina'' é sintaticamente correta, mas é semanticamente incorreta. Há técnicas para codificação de gramáticas com semântica associada, porém este tema está fora do escopo deste curso e deste trabalho.
Escreva o mesmo programa utilizando uma linguagem (imperativa/procedural) da sua escolha.
Juntem-se em grupos de 2 elementos, onde um elemento do grupo vai fazer a implementação em Prolog e o outro vai fazer a implementação em outra linguagem. No relatório vão relatar as facilidades/dificuldades de implementação que cada um teve.
Entregar:
Organização do trabalho escrito:
A submissão será através do Moodle UP. Por favor, não inclua caracteres acentuados no nome do ficheiro de submissão.
Todos os trabalhos serão apresentados em data a combinar. Os dois componentes do grupo deverão estar presentes durante a apresentação. Quem nao estiver presente vai ter nota zero!