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

Author: Jacques Wainer

Created: 2018-04-18 Wed 15:32

Validate