Filipe A. Barroso

Blog

Subscribe to RSS feed

Prolog - Ler de ficheiros

,

Este post está pensado para quem usa o SICStus.

Existem duas formas de ler de ficheiros com o Prolog

  1. See
  2. Open


a)
A forma mais simples de ler de um ficheiro é se este contiver predicados prolog.

Por exemplo:
'familia.pl'
filha(ana).
mae(beatriz).
pai(carlos).
mae_de(beatriz,ana).
pai_de(carlos,ana).


Portanto para ler este ficheiro familia.pl, podem usar o seguinte código:
'ler.pl'
ler(Filename) :- see(Filename), repeat, read(Q), file_to_list(Q,L), seen, print(L).
					
file_to_list(end_of_file,[]).
file_to_list(Q,[Q|L]) :- read(N), file_to_list(N,L).


Como o read/1 lê sempre o próximo predicado podem ir construindo a lista de predicados muito facilmente.
Assim ao fazer a consulta:

?- ler('familia.pl').
[ filha(ana), mae(beatriz), pai(carlos), mae_de(beatriz,ana), pai_de(carlos,ana) ]
yes


b)
Se o ficheiro se encontrar no seguinte formato:
'quadradomagico.txt'
2 7 6
9 5 1
4 3 8


Para este caso já não é possivel usar a função "seen" dado que não são predicados.
Já será necessário usar o open/3 e trabalhar com "Streams".

Para ler o 'quadradomagico.txt' podemos fazer da seguinte forma:
'ler.pl'
ler_txt(Filename) :- 	open(Filename,read,OS),	get_char(OS,C), txt_to_list(C,L,OS), close(OS), print(L).
						
txt_to_list(_,[],OS) 	:- 	at_end_of_stream(OS).
txt_to_list(' ',L,OS) 	:- 	get_char(OS,Q), txt_to_list(Q,L,OS).
txt_to_list('\n',L,OS) 	:- 	get_char(OS,Q), txt_to_list(Q,L,OS).
txt_to_list(C,[C|L],OS)	:-	get_char(OS,Q), txt_to_list(Q,L,OS).


Assim:
?- ler_txt('quadradomagico.txt').
[2,7,6,9,5,1,4,3]
yes


Se tiverem alguma dúvida estarei ao vosso dispor.

Ficheiros usados neste post
familia.pl
ler.pl
quadradomagico.txt

HTML 101

,

No artigo HTML 100, aprendemos a criar uma simples página HTML.

Passo agora a explicar as etiquetas mais simples e algumas formas de apresentar o texto.

Cabeçalhos

Titulo 1

<h1>Titulo 1 </h1>

Titulo 2

<h2>Titulo 2 </h2>

Titulo 3

<h3>Titulo 3 </h3>

Nota: "h" de header

Parágrafos e formatações

Isto é um parágrafo

<p>Isto e um paragrafo </p>
Texto a negrito
<b>Texto a negrito</b>
Texto em itálico
<i>Texto em italico</i>

Nota: "b" de bold, "p" de paragraph, "i" de italic

Listas
  • Item 1
  • Item 2
  • Item 3
<ul>
 <li> Item 1 </li>
 <li> Item 2 </li>
 <li> Item 3 </li>
</ul>
  1. Item 1
  2. Item 2
  3. Item 3
<ol>
 <li> Item 1 </li>
 <li> Item 2 </li>
 <li> Item 3 </li>
</ol>

Nota: "ul" de unordered,"ol" de ordered list e "li" de list item

Outros
a ultima página da internet
<a href="http://www.w3schools.com/html/lastpage.htm" > a ultima pagina da internet </a>

Este parágrafo tem uma quebra de linha

<p> Este paragrafo tem 
 uma quebra de linha </p>

Estes parágrafos têm


uma linha a dividi-los

<p> Estes paragrafos tem </p>
<hr /> 
<p>uma linha a dividi-los</p>

Com estas simples etiquetas HTML vocês podem fazer imensas páginas, o único limite é a imaginação

Deixo-vos a seguir um exemplo :

Lista de compras

  • 3kg de batatas
  • 2 pacotes de natas
  • 1kg de açúcar
  • 1kg de bananas
Não esquecer de comprar um bolo

Problema Lógico

"The Island of Knights and Knaves"

Read more...

Seurat, the translator

,

Sabiam que tenho vários projectos pessoais, uns incompletos outros terminados, uns de pequena escala outros impossíveis de terminar sozinho?

Apresento-vos agora um dos meus pequenos projectos.

"Seurat, the translator"

É um pequeno "robô" para o google wave que criei, que traduz de português para inglês o que escreveres na wave.

Para experimentares este meu pequeno projecto basta adicionares à tua wave o seurat627@appspot.com .

No futuro terá muitas mais funcionalidades, mas até lá diverte-te com esta versão.


Se precisarem de convites para a wave, avisem-me que ainda tenho muitos.

Note to self:

"Evitar passar no fim da aula, na qual que somos supostos estar, para não esbarrar com o professor"

Oops

Estava eu numa sala de aula vazia, tranquilo a trabalhar enquanto também via um episódio de "Mentalist".
É então que entra um grupo de alunos, continuo na mesma. Entra outro grupo e agora este senta-se à minha volta. Eu aumento o volume dos headphones. Cada vez mais entra pessoal e eu à medida que mais entram, mais eu aumento o volume dos meus headphones até que... Noto que todos se acalmaram, levanto a cabeça e reparo num rapaz a falar e todos os outros a olharem para ele. Uns minutos depois estranho, tiro os headphones olho em volta e oiço o jovem a falar:

"Vamos então começar o exercicio, serão no fim avaliados e a nota do exercicio contará para parte a avaliação contínua..."

*OOOOOPPPPPSSSS*

Estava eu no meio de uma aula!!!! Na maldita porta dizia que só havia aulas apartir das 11h!!!
Arrumei tudo e sai calmamente pela porta dos fundos enquando se riam da minha cara aqueles por que eu passava.

HTML 100

,


HTML significa : "HyperText Markup Language".
Consiste basicamente em etiquetas (tags) que serão interpretadas pelos navegadores de internet (web browers) de forma a podermos visualizar, o resultado do código criado, de forma correcta.

Qualquer um pode criar uma página web em HTML. Basta usar o mais simples dos editores de texto, como por exemplo o "Notepad" (Bloco de Notas).

[ESTRUTURA]
Para começar uma qualquer página HTML, existe um elemento fulcral:
<html> </html>

Como repararam, eu chamei de elemento ao conjunto de duas etiquetas. Uma que representa o início e a outra com o mesmo nome mas com '/' antes, a representar o fim do elemento.

Como todas as páginas web servem para ter conteúdo, existe um elemento para o representar e o que quisermos apresentar na página, será inserido dentro deste elemento.
<body> </body> 

> Com estes dois elementos, vocês podem agora fazer a vossa primeira página web, da seguinte forma:
[/ALIGN]
<html>
  <body>
     Hello World!
  </body>
</html>

Peguem neste bocado de código, insiram-no num novo ficheiro no bloco de notas e gravem-no como "hello.html" (hello.html.txt não serve). Após gravado podem abrir-lo com qualquer web browers: IE, firefox, safari, opera, etc.
Verão então, o resultado da vossa primeira página. Parabéns.

[/B]
[ERROS COMUNS]
> Nunca escrevam o código todo de seguida:
[/ALIGN]
<html><body>HelloWorld!</body></html>

O código fica ilegível.
Imaginem milhares de linhas de código, condensados assim, numa só linha. Como é que depois encontrariam o que querem alterar?
Estruturem sempre o vosso código.

> Também não faria sentido ter o seguinte:
<html>
  <body>
       Hello World!
</html>
  </body>

Pois significaria, que a página web, tinha acabado antes da etiqueta de conteúdo ter terminado. Tenham muita atenção à ordem de fecho dos elementos. "O primeiro a começar é sempre o último a fechar"

DICAS
> Aconselho-vos a usar o "Notepad++" para a criação das vossas primeiras páginas. Podem encontrá-lo nos "links" à direita.

> Não tenham medo experimentar e pesquisar.

> O porquê do "Hello World", aqui

Ser Engenheiro Informático

É ser pintor sem telas.
ser arquitecto sem plantas.
ser escultor sem pedras!

Ser... Teólogo
Cientista, médico.
Advogado...

É criador e destruidor.
Ofensivo e defensivo.
É um ser imaginativo!

É inventor em mundos intangíveis.
Senhor de problemas insolúveis.
É criador sem limites!


...Mal compreendido.

My Opera Unite

Acrescentei um link no menu em cima: "Unite".

Serve para encaminhar-vos para as minhas várias páginas do "Opera Unite".
Deêm-lhe uma vista de olhos, podem vir a dar-vos bastante jeito.

Usem e abusem!

Links

,

Achei importante, para no futuro não me esquecer, acrescentar um série de "links" de forma a partilhar convosco programas, sites, entre outros links que acho fulcrais as pessoas conhecerem.
Acedam à secção "Links" para verem quais adicionei.

Se acharem que devo acrescentar mais algum, aceito propostas.

Início

Decidi dar mais uma oportunidade aos Blogs. Desta vez será bastante diferente, não terei o mesmo objectivo que o "Loud Silence", caminharei no sentido contrário.

Tentarei apresentar os meus projectos pessoais inacabados ou não, trabalhos da faculdade recentes ou antigos. Tentarei explicar aqui o que vou aprendendo pela internet fora.

Desejem-me boa sorte