0% acharam este documento útil (0 voto)
6 visualizações2 páginas

Funções em Prolog: Listas e Números

O documento apresenta funções em Prolog para manipulação de listas, como encontrar um elemento na N-ésima posição, remover N primeiros elementos e inverter listas. Também inclui verificações para números primos e pares, além de uma explicação sobre o operador =:= que compara valores numéricos. Exemplos de uso das funções são fornecidos para melhor compreensão.

Enviado por

Nunes Mateus
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
6 visualizações2 páginas

Funções em Prolog: Listas e Números

O documento apresenta funções em Prolog para manipulação de listas, como encontrar um elemento na N-ésima posição, remover N primeiros elementos e inverter listas. Também inclui verificações para números primos e pares, além de uma explicação sobre o operador =:= que compara valores numéricos. Exemplos de uso das funções são fornecidos para melhor compreensão.

Enviado por

Nunes Mateus
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

1.

Encontrar o elemento na N-ésima posição da lista


---------------------------------------------------
elemento_na_posicao(1, [H|_], H).
elemento_na_posicao(N, [_|T], Elem) :-
N > 1,
N1 is N - 1,
elemento_na_posicao(N1, T, Elem).

Exemplo:
?- elemento_na_posicao(3, [a, b, c, d], X).
X = c.

2. Remover os N primeiros elementos de uma lista


-------------------------------------------------
remover_n_primeiros(0, Lista, Lista).
remover_n_primeiros(N, [_|T], Resto) :-
N > 0,
N1 is N - 1,
remover_n_primeiros(N1, T, Resto).

Exemplo:
?- remover_n_primeiros(2, [a, b, c, d], R).
R = [c, d].

3. Inverter uma lista


----------------------
Versão simples:
inverter_lista([], []).
inverter_lista([H|T], LInvertida) :-
inverter_lista(T, TInvertida),
append(TInvertida, [H], LInvertida).

Versão eficiente com acumulador:


inverter_lista(Lista, Resultado) :-
inverter_aux(Lista, [], Resultado).

inverter_aux([], Acc, Acc).


inverter_aux([H|T], Acc, Resultado) :-
inverter_aux(T, [H|Acc], Resultado).

4. Verificar se um número é primo


----------------------------------
primo(N) :-
N > 1,
\+ tem_divisor(N, 2).

tem_divisor(N, Div) :-
Div * Div =< N,
(N mod Div =:= 0 ; tem_divisor(N, Div + 1)).

Listar primos até N:


lista_primos(Limite, Lista) :-
findall(X, (between(2, Limite, X), primo(X)), Lista).

5. Verificar se um número é par


--------------------------------
par(N) :-
N mod 2 =:= 0.

Listar pares até N:


lista_pares(Limite, Lista) :-
findall(X, (between(0, Limite, X), par(X)), Lista).

6. Explicação do operador =:=


------------------------------
O operador =:= compara o valor numérico de duas expressões.

Exemplos:
?- 2 + 3 =:= 5. % true
?- X is 4 + 1, X =:= 5. % true
?- X = 2 + 3, X =:= 5. % false (X é estrutura, não valor)

Você também pode gostar