Aula 16
Prolog
1 Strings
Originalmente strings são listas de caracteres.
Caracteres são inteiros (ASCII) codes
X = `abcde gh`.
Mas caracteres podem ser tambem simbolos de uma letra só chars
string_chars("abcde ef",X).
string_codes("abcde ef",X).
Em SWI prolog strings NAO sao listas (muito ineficiente) mas sim um tipo básico, que pode ser convertido ao string tradicional pelas funções acima.
2 Input
read(X)
le um termo de prolog e unifica X com ele. O termo termina com um "."
X = 'end_of_file'
se nao ha nada para ler
Ha versões que leem de um arquivo. Há predicados que leem caracter por caracter (get)
3 Output
print(X) imprime um termo.
nl imprime um newline
format(string,X,Y ..) para impressao formatada
put para impressão de caracteres
4 Programas com I/O
Se voce pode ler tudo antes de processar
topo :- le(IN), proc(IN,OUT), imprime(OUT). ou topo :- le(IN),!, proc(IN,OUT), imprime(OUT). ou topo :- mensagem_inicio,le(IN),!, proc(IN,OUT),imprime(OUT), mensagem_fim. ou topo :- le(IN),!, proc(IN,OUT), imprime(OUT). topo :- print("erro na leitura").
Se voce precisa processar dado por dado
topo :- proc. proc :- le(X), (X = 'end_of_file' -> true ; ignore(processa(X)) , proc. proc :- print("falhou na leitura"). ignore(Goal) :- call(Goal), !. ignore(_).
outras versões
topo :- abrearq(A),proc(A),fechaarq(A). topo :- mensagem_inicio, proc, mensagem_fim.
5 rodar um programa em batch
swipl -q -f seu_programa.pr -t predicado_inicial