:- prompt( _, '' ) .
:- use_module( library( readutil) ) .
main:-
process,
/* Exemplo 1 (declaração) */
foo( 42 ) .
foo( 'bar' ) .
foo( [ _, _, _| _] ) .
/* Exemplo 2 (declaração) */
bar( X, Y, Z) :-
X = Y,
foo( X) ,
X = Z.
/* 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
) .
process:-
/* Exemplo 1 (uso) */
( foo( 42 ) - > writeln( 'foo(42) é true' ) ; writeln( 'foo(42) é false' ) ) ,
( foo( 10 ) - > writeln( 'foo(10) é true' ) ; writeln( 'foo(10) é false' ) ) ,
( foo( 1.23 ) - > writeln( 'foo(1.23) é true' ) ; writeln( 'foo(1.23) é false' ) ) ,
( foo( [ 1 , 2 , 3 , 4 , 5 ] ) - > writeln( 'foo([1,2,3,4,5]) é true' ) ; writeln( 'foo([1,2,3,4,5]) é false' ) ) ,
( foo( [ 1 , 2 ] ) - > writeln( 'foo([1,2]) é true' ) ; writeln( 'foo([1,2]) é false' ) ) ,
( foo( qualquer_coisa) - > writeln( 'foo(qualquer_coisa) é true' ) ; writeln( 'foo(qualquer_coisa) é false' ) ) ,
writeln( 'foo(QualquerCoisa) pode ser:' ) ,
findall ( QualquerCoisa
, ( foo
( QualquerCoisa
) , write ( ' ' ) , writeln
( QualquerCoisa
) ) , _
) ,
/* Exemplo 2 (uso) */
bar( X, [ 1 , A, 3 ] , [ B, 2 , C] ) ,
writeln( 'bar(X, [1,A,3], [B,2,C])' ) ,
write ( ' X = ' ) , writeln
( X
) , write ( ' A = ' ) , writeln
( A
) , write ( ' B = ' ) , writeln
( B
) , write ( ' C = ' ) , writeln
( C
) ,
writeln( 'bar(P,_,Q), write(\' Testando: \'), writeln(P), Q = \' bar\' pode ser:' ) ,
bar( P, _, Q) ,
write ( 'Testando: ' ) , writeln
( P
) , Q = 'bar' ,
write ( 'Aceitou: ' ) , writeln
( P
) ) , _) ,
/* Exemplo 3 (uso) */
distancia( ponto( 1 , 2 ) , ponto( 3 , 4 ) , D) ,
writeln( 'distancia(ponto(1,2), ponto(3,4), D)' ) ,
write ( ' D = ' ) , writeln
( D
) ,
write ( 'distancia(ponto(1,2), ponto(3,4), 5) é ' ) , ( distancia
( ponto
( 1 , 2 ) , ponto
( 3 , 4 ) , 5 ) - > writeln
( true ) ; writeln
( false
) ) ,
distancia( foo, bar, baz) - >
writeln( 'Ooops! distancia(foo, bar, baz) executou com sucesso!!!' ) ;
writeln( 'Ooops! distancia(foo, bar, baz) executou com falha!!!' )
) , tipo_invalido, writeln( 'Tipo inválido em distancia(foo, bar, baz)' ) ) .
:- main.
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usc2lsZW50KS4KOi0gcHJvbXB0KF8sICcnKS4KOi0gdXNlX21vZHVsZShsaWJyYXJ5KHJlYWR1dGlsKSkuCgptYWluOi0KCXByb2Nlc3MsCgloYWx0LgoKLyogRXhlbXBsbyAxIChkZWNsYXJhw6fDo28pICovCmZvbyg0MikuCmZvbygnYmFyJykuCmZvbyhbXyxfLF98X10pLgoKLyogRXhlbXBsbyAyIChkZWNsYXJhw6fDo28pICovCmJhcihYLFksWikgOi0KICAgIFggPSBZLAogICAgZm9vKFgpLAogICAgWCA9IFouCgovKiBFeGVtcGxvIDMgKGRlY2xhcmHDp8OjbykgKi8KZGlzdGFuY2lhKHBvbnRvKFgxLFkxKSwgcG9udG8oWDIsWTIpLCBEKSA6LQogICAgISwKICAgIEQgaXMgc3FydCgoWDEtWDIpKioyICsgKFkxLVkyKSoqMikuCmRpc3RhbmNpYShfLF8sXykgOi0gdGhyb3codGlwb19pbnZhbGlkbykuCgpwcm9jZXNzOi0KCS8qIEV4ZW1wbG8gMSAodXNvKSAqLwoJKCBmb28oNDIpICAgICAgICAgICAgIC0+IHdyaXRlbG4oJ2Zvbyg0Mikgw6kgdHJ1ZScpICAgICAgICAgICAgIDsgd3JpdGVsbignZm9vKDQyKSDDqSBmYWxzZScpKSwKCSggZm9vKDEwKSAgICAgICAgICAgICAtPiB3cml0ZWxuKCdmb28oMTApIMOpIHRydWUnKSAgICAgICAgICAgICA7IHdyaXRlbG4oJ2ZvbygxMCkgw6kgZmFsc2UnKSksCgkoIGZvbygxLjIzKSAgICAgICAgICAgLT4gd3JpdGVsbignZm9vKDEuMjMpIMOpIHRydWUnKSAgICAgICAgICAgOyB3cml0ZWxuKCdmb28oMS4yMykgw6kgZmFsc2UnKSksCgkoIGZvbyhbMSwyLDMsNCw1XSkgICAgLT4gd3JpdGVsbignZm9vKFsxLDIsMyw0LDVdKSDDqSB0cnVlJykgICAgOyB3cml0ZWxuKCdmb28oWzEsMiwzLDQsNV0pIMOpIGZhbHNlJykpLAoJKCBmb28oWzEsMl0pICAgICAgICAgIC0+IHdyaXRlbG4oJ2ZvbyhbMSwyXSkgw6kgdHJ1ZScpICAgICAgICAgIDsgd3JpdGVsbignZm9vKFsxLDJdKSDDqSBmYWxzZScpKSwKCSggZm9vKHF1YWxxdWVyX2NvaXNhKSAtPiB3cml0ZWxuKCdmb28ocXVhbHF1ZXJfY29pc2EpIMOpIHRydWUnKSA7IHdyaXRlbG4oJ2ZvbyhxdWFscXVlcl9jb2lzYSkgw6kgZmFsc2UnKSksCgkKCXdyaXRlbG4oJ2ZvbyhRdWFscXVlckNvaXNhKSBwb2RlIHNlcjonKSwKCWZpbmRhbGwoUXVhbHF1ZXJDb2lzYSwgKGZvbyhRdWFscXVlckNvaXNhKSwgd3JpdGUoJyAgICAnKSwgd3JpdGVsbihRdWFscXVlckNvaXNhKSksIF8pLAoJCglubCwKCQoJLyogRXhlbXBsbyAyICh1c28pICovCgliYXIoWCwgWzEsQSwzXSwgW0IsMixDXSksCgl3cml0ZWxuKCdiYXIoWCwgWzEsQSwzXSwgW0IsMixDXSknKSwKCXdyaXRlKCcgICAgWCA9ICcpLCB3cml0ZWxuKFgpLAoJd3JpdGUoJyAgICBBID0gJyksIHdyaXRlbG4oQSksCgl3cml0ZSgnICAgIEIgPSAnKSwgd3JpdGVsbihCKSwKCXdyaXRlKCcgICAgQyA9ICcpLCB3cml0ZWxuKEMpLAoJCgl3cml0ZWxuKCdiYXIoUCxfLFEpLCB3cml0ZShcJ1Rlc3RhbmRvOiBcJyksIHdyaXRlbG4oUCksIFEgPSBcJ2JhclwnIHBvZGUgc2VyOicpLAoJZmluZGFsbChQLCAoCgkgICAgYmFyKFAsXyxRKSwgCgkgICAgd3JpdGUoJ1Rlc3RhbmRvOiAnKSwgd3JpdGVsbihQKSwgCgkgICAgUSA9ICdiYXInLAoJICAgIHdyaXRlKCdBY2VpdG91OiAnKSwgd3JpdGVsbihQKQoJKSwgXyksCgoJbmwsCgkKCS8qIEV4ZW1wbG8gMyAodXNvKSAqLwogICAgZGlzdGFuY2lhKHBvbnRvKDEsMiksIHBvbnRvKDMsNCksIEQpLAogICAgCiAgICB3cml0ZWxuKCdkaXN0YW5jaWEocG9udG8oMSwyKSwgcG9udG8oMyw0KSwgRCknKSwKICAgIHdyaXRlKCcgICAgRCA9ICcpLCB3cml0ZWxuKEQpLAoJCiAgICB3cml0ZSgnZGlzdGFuY2lhKHBvbnRvKDEsMiksIHBvbnRvKDMsNCksIDUpIMOpICcpLAogICAgKGRpc3RhbmNpYShwb250bygxLDIpLCBwb250bygzLDQpLCA1KSAtPiB3cml0ZWxuKHRydWUpIDsgd3JpdGVsbihmYWxzZSkpLAogICAgCiAgICBjYXRjaCgoCiAgICAgICAgZGlzdGFuY2lhKGZvbywgYmFyLCBiYXopIC0+CiAgICAgICAgd3JpdGVsbignT29vcHMhIGRpc3RhbmNpYShmb28sIGJhciwgYmF6KSBleGVjdXRvdSBjb20gc3VjZXNzbyEhIScpIDsKICAgICAgICB3cml0ZWxuKCdPb29wcyEgZGlzdGFuY2lhKGZvbywgYmFyLCBiYXopIGV4ZWN1dG91IGNvbSBmYWxoYSEhIScpCiAgICApLCB0aXBvX2ludmFsaWRvLCB3cml0ZWxuKCdUaXBvIGludsOhbGlkbyBlbSBkaXN0YW5jaWEoZm9vLCBiYXIsIGJheiknKSkuCgoKOi0gbWFpbi4=