Paradigma de programação Logica e Funcional [HASKELL & PROLOG]

Olá a todos!

Como eu não achei nenhum grupo deste paradigma de programação, vou utilizar esta comunidade para tentar criar uma lista de discussão sobre o assunto.

Estou na área acadêmica por enquanto, e são utilizadas as seguintes linguagens na disciplina que estou cursando PROLOG e Haskell.

Sei que não é o foco do GUJ, mas gostaria de pedir aos moderadores, que se possível criassem um fórum sobre PROLOG e Haskell, devido a dificuldade
de encontrar materiais. :idea:

:?:

vlws!

Vamos a duvida então:

Estou precisando percorrer uma lista utilizando PROLOG:

Acho que ficaria assim:

percorrer([],nil).
percorrer(lista,elem):-
percorrer([X | Xs],X).

eh isto msm ??? como faço para imprimir os elementos da lista ???

vlws!

Acho que esse é um dos motivos que o Java é a linguagem mais utilizada no mundo! - Linguagem madura, robusta e consolidada!

Boa Sorte!

[quote=ppro11]Acho que esse é um dos motivos que o Java é a linguagem mais utilizada no mundo! - Linguagem madura, robusta e consolidada!

Boa Sorte![/quote]

Blz!!!

Velho, eu não saber PROLOG não significa que ela não seja “madura”… essa linguagem é da década de 60, acho q é até mais antiga q JAVA …
me parece q eh bastante usada em IA.

mas, valeu pela dica !!!
:?:

:?:

Sinceramente eu nunca tinha ouvido falar dessa linguagem… mas legal, é mais uma que eu aprendi!
Miltex quando disse que o Java é uma a linguagem madura, não quis me referir ao tempo de existência da linguagem… mas sim a quantidade de artigos, fóruns, tutoriais e etc… o que facilita e muito a vida dos desenvolvedores! Como você disse que as linguagens que você esta estudando, não existem fontes na internet para pesquisa, eu acabei fazendo esse comentário apenas para ressaltar a vantagem de se programar em Java!

De qualquer forma desejo Sorte a você e no que eu puder ajudar conte comigo!

abraço

Eu faria assim:

imprimir( [ ] ). imprimir( [ X | Y ] ) :- nl, write(X), imprimir( Y ).

[quote=Miltex]Vamos a duvida então:

Estou precisando percorrer uma lista utilizando PROLOG:

Acho que ficaria assim:

percorrer([],nil).
percorrer(lista,elem):-
percorrer([X | Xs],X).

eh isto msm ??? [/quote]

Quase. Sempre que você for pensar em prolog, você deve pensar em recursão. E para montar uma boa recusão, você deve pensar em duas coisas:

  1. A condição de parada;
  2. O elemento que se repete.

No caso de percorrer a lista, a condição de parada é a lista ficar vazia:

Para percorrer o elemento, iremos separar a lista na cabeça e no corpo. Fazemos qualquer coisa com o elemento e, então, repetimos o processo para o corpo:

Essa é exatamente a estrutura do programa para imprimir que postei para você. No caso, fazQualquerCoisa foi substituído pelas função nl, write.

Bom dia, pessoal!!!

valeu pelas dicas ViniGodoy …

fica a dica para os moderadores do GUJ, talvez seria interessante criar um Fórum para HASKELL e PROLOG …

vlw!!!

Talvez programação funcional seja uma boa ideia de fórum, agora Haskell e Prolog eu acho que é específico demais, e não tem tanta procura no GUJ pra justificar um fórum só pra elas.

Existem diversas linguagens no paradigma funcional que rodam na JVM e compatíveis com a plataforma Java, portanto a ideia pode até ser boa. Se bem que mesmo pra isso eu não vejo tanta procura aqui no GUJ.

Rodrigo Sasaki, foi uma dica… acho q facilitaria as pesquisas ao assunto…

ViniGodoy, a impressão da lista ficou d boa, mas para imprimir uma matriz:

Código:

%imprimir Lista
imprimir( [ ] ).
imprimir( [ X | Y ] ) :- nl, write(X), imprimir( Y ).

%imprimir Matriz

imprimirMat( [ ] ).
imprimirMat( [ X | Y ] ) :- imprimirMat( X ),nl,write(X),imprimirMat(Y).

Resultado:

[code]
% library(win_menu) compiled into win_menu 0.00 sec, 29 clauses
% c:/Users/Milton/Documents/Prolog/imprimir.pl compiled 0.00 sec, 3 clauses
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.2.4)
Copyright © 1990-2012 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

1 ?- imprimir([a,c,d,b]).

a
c
d
b
true.

2 ?- imprimir([a,c,[1,2,3],b]).

a
c
[1,2,3]
b
true.

3 ?- imprimir([[],c,[1,2,3],b,[bala,bola,toys]]).

[]
c
[1,2,3]
b
[bala,bola,toys]
true.[/code]

Alguém tem alguma dica aí …

:?:

Acho que seria mais fácil criar um fórum para C++ do que para Haskel e Prolog. Posso contar nos dedos quantas dúvida dessas linguagens já vi em todos os meus anos de GUJ (foram apenas 2).

O que você está chamando de matriz? E como você gostaria que fosse impresso?

Eu sugiro que você quebre muito a cabeça antes de pedir a dúvida no fórum. Eu sei, dá nauseas, dor de cabeça, tontura, além de crises de choro e desespero, mas é só assim que você começa a entender um paradigma tão diferente da linguagem procedural.

Realmente, é uma dica valiosa, é a melhor forma de aprender, depois de entender os conceitos e buscar em diversas fontes!

No StackOverflow você pode encontrar uma comunidade até que bem ativa:


O bom de lá é o nível técnico das perguntas e respostas.
O ruim é que é um site de Perguntas e Respostas, diferente de um fórum onde se pode discutir de forma mais livre, trocar opiniões e etc.

Valeu pelas dicas pessoal !

Vou quebrar a kbça aqui…

Abraço!

:?