:- prompt(_, '').
:- use_module(library(readutil)).
main:-
writeln('Executando a função "main"'),
writeln('(se você está vendo isso, é porque o programa compilou com sucesso...)'),
/* Ajudando o compilador... */
term_expansion((?-Term), (?-Term)) :- % Para cada query encontrado durante a compilação...
clause(Term
, Cauda
), % ...verificamos se existe uma chamada de função pra ela... analise_estatica(Cauda). % ...e fazemos uma análise estática da mesma.
term_expansion(Term, Term). % Se não é chamada de função, está tudo ok.
analise_estatica
(throw(tipo_invalido
)) :- % Se essa função ia lançar tipo_invalido em execução... writeln('Erro: tipo inválido'), % ...reporte ela de uma vez em compilação! :P
halt. % ...e pare o programa. analise_estatica(_). % Caso contrário está tudo ok! :)
/* Exemplo 3 (declaração) */
distancia(ponto(X1,Y1), ponto(X2,Y2), D) :-
!,
D
is sqrt((X1
-X2
)**2 + (Y1
-Y2
)**2).distancia
(_
,_
,_
) :- throw(tipo_invalido
).
?- distancia(ponto(1,2), ponto(3,4), D).
?- distancia(ponto(1,2), ponto(3,4), 5).
:- main.
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usc2lsZW50KS4KOi0gcHJvbXB0KF8sICcnKS4KOi0gdXNlX21vZHVsZShsaWJyYXJ5KHJlYWR1dGlsKSkuCgptYWluOi0KICAgIHdyaXRlbG4oJ0V4ZWN1dGFuZG8gYSBmdW7Dp8OjbyAibWFpbiInKSwKICAgIHdyaXRlbG4oJyhzZSB2b2PDqiBlc3TDoSB2ZW5kbyBpc3NvLCDDqSBwb3JxdWUgbyBwcm9ncmFtYSBjb21waWxvdSBjb20gc3VjZXNzby4uLiknKSwKCWhhbHQuCgkKLyogQWp1ZGFuZG8gbyBjb21waWxhZG9yLi4uICovCnRlcm1fZXhwYW5zaW9uKCg/LVRlcm0pLCAoPy1UZXJtKSkgOi0gJSBQYXJhIGNhZGEgcXVlcnkgZW5jb250cmFkbyBkdXJhbnRlIGEgY29tcGlsYcOnw6NvLi4uCiAgICBjbGF1c2UoVGVybSwgQ2F1ZGEpLCAgICAgICAgICAgICAgJSAuLi52ZXJpZmljYW1vcyBzZSBleGlzdGUgdW1hIGNoYW1hZGEgZGUgZnVuw6fDo28gcHJhIGVsYS4uLgogICAgYW5hbGlzZV9lc3RhdGljYShDYXVkYSkuICAgICAgICAgICUgLi4uZSBmYXplbW9zIHVtYSBhbsOhbGlzZSBlc3TDoXRpY2EgZGEgbWVzbWEuCnRlcm1fZXhwYW5zaW9uKFRlcm0sIFRlcm0pLiAgICAgICAgICAgJSBTZSBuw6NvIMOpIGNoYW1hZGEgZGUgZnVuw6fDo28sIGVzdMOhIHR1ZG8gb2suCiAgICAKYW5hbGlzZV9lc3RhdGljYSh0aHJvdyh0aXBvX2ludmFsaWRvKSkgOi0gJSBTZSBlc3NhIGZ1bsOnw6NvIGlhIGxhbsOnYXIgdGlwb19pbnZhbGlkbyBlbSBleGVjdcOnw6NvLi4uCiAgICB3cml0ZWxuKCdFcnJvOiB0aXBvIGludsOhbGlkbycpLCAgICAgICAlIC4uLnJlcG9ydGUgZWxhIGRlIHVtYSB2ZXogZW0gY29tcGlsYcOnw6NvISA6UAogICAgaGFsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIC4uLmUgcGFyZSBvIHByb2dyYW1hLgphbmFsaXNlX2VzdGF0aWNhKF8pLiAgICAgICAgICAgICAgICAgICAgICAlIENhc28gY29udHLDoXJpbyBlc3TDoSB0dWRvIG9rISA6KQoKLyogRXhlbXBsbyAzIChkZWNsYXJhw6fDo28pICovCmRpc3RhbmNpYShwb250byhYMSxZMSksIHBvbnRvKFgyLFkyKSwgRCkgOi0KICAgICEsCiAgICBEIGlzIHNxcnQoKFgxLVgyKSoqMiArIChZMS1ZMikqKjIpLgpkaXN0YW5jaWEoXyxfLF8pIDotIHRocm93KHRpcG9faW52YWxpZG8pLgoKPy0gZGlzdGFuY2lhKHBvbnRvKDEsMiksIHBvbnRvKDMsNCksIEQpLgo/LSBkaXN0YW5jaWEocG9udG8oMSwyKSwgcG9udG8oMyw0KSwgNSkuCgo6LSBtYWluLg==