Entrada/Saída

 

ISO Standard

Abrir ficheiro/Stream

open(Stream, Mode, StreamID)

Stream é um átomo representando o pathname do ficheiro ou pipe(Command)

Mode pode ser read, write, append ou update

StreamID é o identificador do/a ficheiro/stream aberto/a. Deve usar-se nas instruções de Input/Output

Fechar um ficheiro/stream

Close(StreamID)

Que ficheiros/Steams existem e quais as suas propriedades?

stream_property(?Stream, ?StreamProperty)

Ler um termo do teclado ou de um ficheiro/Stream.

read instancia o termo lido com end_of_file quando chega ao fim do ficheiro.

read(Term)

read(Stream, Term)

Escrever um termo no ecrã ou num ficheiro/Stream

write(Term); writeq(Term)

write(Stream, Term); writeq(Stream, Term)

Mudar de linha

nl/0, nl(Stream)

 

 

Leitura de caracteres

get_code(Code); get_code(Stream, Code); get_char(Ch); get_char(Stream, Ch); get_byte(Byte); get_byte(Stream, Byte)

Code = -1, Byte = -1 no fim do ficheiro; Ch = end_of_file no fim do ficheiro

Teste de final do ficheiro

at_end_of_stream ; at_end_of_stream(Stream)

Escrita de caracteres

put_code(Code); put_code(Stream, Code); put_char(Ch); put_char(Stream, Char); put_byte(Byte); put_byte(Stream, Byte)

 

Manipulação de estruturas

Goal

 

arg(N, Term, Arg)

N: aridade; Term: estrutura; Arg: argumento.

Obter/fixar o valor do N-ésimo argumento de uma estrutura.

Term=..[ F|Args]

F é o functor da estrutura Term; Args é a lista dos argumentos de Term

functor(Term, F, N)

F é o functor de Term; N é a aridade de Term

Emparelhamento de padrões

Goal

 

A = B

Emparelha A e B, i.e., testa se A e B são iguais, ou efectua o conjunto mínimo de substituições em A e/ou B para que eles fiquem iguais.

A \= B

Testa se A e B são emparelháveis (o contrário de =).

Comparação

Predicado

 

==

Testa se dois termos são iguais. Se X for uma variável não instanciada, X==b falha. Sendo X e Y duas variáveis não instanciadas, X == Y falha. X==Y tem sucesso. Sendo X e Y duas variáveis inicialmente não instanciadas, X=Y, X==Y tem sucesso.

a+b == b+a falha porque os termos a+b e b+a não são iguais

\==

A \== B: equivalente a not(A==B)

=:=

Compara os valores de dois termos numéricos.

a =:= a falha porque a não é nenhum termo com valor numérico

1=:=1 tem sucesso

1+2 =:= 2+1 tem sucesso

>, >=, <, =<

Operadores relacionais para expressões numéricas. Avaliam as expressões antes da comparação.

@>, @<, ¼

Operadores de comparação para qualquer tipo de termos. Não avalia expressões numéricas.

?- 5 @> 2 Tem sucesso

?- 5 @> 2+1 Não tem sucesso porque a comparação faz-se entre o 5 e o functor principal de 2+1, isto é, +.

Os termos são comparados por ordem alfabética. Por exemplo, [b] @> [a, b, c] é verdade.

Conversões

Predicate/Arity

 

atom_chars/2

converts between an atom and a list of characters

atom_codes/2

converts between an atom and a list of codes

number_chars/2

convert between a number and a list of characters

number_codes/2

convert between a number and a list of codes

atomic_list_concat/2

Converte uma lista de átomos/números num átomo

Predicados de teste de tipos de dados

Predicate/Arity

 

atom/1

Tests if its argument is an atom

atomic/1

Tests if its argument is an atom or a number

compound/1

tests for a compound term

float/1

tests for a floating point number

ground/1

checks for completely bound terms

integer/1

Tests if its argument is an integer

is_list/1

Tests if its argument is a list

var/1

Tests for a non instantiated variable

nonvar/1

Tests if its argument is not a variable. For instance, nonvar(a) succeeds. (X=a, nonvar(X)) also succeeds.

number/1

Tests for a number (either float or integer)

simple/1

checks for an atomic term or a variable

string/1

tests for a string