Jump to content

Lógica e Computação - capicua (urgente)


Recommended Posts

Posted

Boas. Tenho um trabalho de Lógica e Computação para fazer e estou com alguns problemas, passo a explicar: tenho que, dadas as seguintes permissas criar 1 predicado que verifique se uma lista é capicua!

Lista vazia = vazia

Lista com cabeça c e resto r (uma lista) = lista(c,r)

Premissas:

/* Dimensão de uma lista */

diml(vazia,0).

@(c,@(r,@(dr,@(d,diml(r,dr)*&soma(dr,1,d)->diml(lista(c,r),d))))).

/* Membro de uma lista */

@(c,@(r,membro(c,lista(c,r)))).

@(c,@(r,@(x,membro(x,r) -> membro(x,lista(c,r))))).

/* Juntar um elemento no fim de uma lista */

@(x,juntarfim(x,vazia,lista(x,vazia))).

@(x,@(c,@(r,@(k,juntarfim(x,r,k)->juntarfim(x,lista(c,r),lista(c,k)))))).

/* Inverter uma lista */

inverter(vazia,vazia).

@(c,@(r,@(k,@(i,inverter(r,k)*juntarfim(c,k,i)->inverter(lista(c,r),i))))).

As premissas foram feitas pelo engenheiro. A "solução" que encontrei foi esta:

@(x,capicua(lista(x,vazio))).

@(x, @(y, capicua(lista(x, y)) -> igual(lista(x, y),inverter(lista(x,y))))).

O meu problema é mesmo como fazer o código para ver se são iguais, o inverter já tenho.

Isto é feito num programa chamado LOGIS, que é baseado em Prolog, feito pelos engenheiros.

PS: o @ = qualquer que seja.

Obrigado!

Posted

Bom, basicamente tens o @ e o #.

@ lê-se qualquer que seja e # lê-se existe um. Quando tens isto associado a uma letra, essa letra é tomada como variável.

// @(x , pai(x) ) isto lê-se para qualquer x, pai(x)  é verdadeiro (todo o x tem pai)

Depois podes fazer cenas mais complexas em que metes os símbolos lógicos

-  (negação)

*  (and lógico)

+  (or lógico)

-> (implicação) // A->B    A verdadeiro se B verdadeiro

<-> (implicação estrita) // A<->B  só é verdade para os dois membros verdadeiros.

👍

Posted

Bom, a solução que encontrei para o meu problema foi esta:

/* Capicua */

@(c,@(r,@(i,((inverter(lista(c,r),i)*iguais(lista(c,r),i))->capicua(lista(c,r)))))).

/* Igual */

iguais(vazia,vazia).

@(c,@(r,iguais(lista(c,r),lista(c,r)))).

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.