fork download
  1. :- set_prolog_flag(verbose,silent).
  2. :- prompt(_, '').
  3. :- use_module(library(readutil)).
  4.  
  5. main:-
  6. process,
  7.  
  8. /* Leitura da entrada */
  9.  
  10. ler_chars(S) :-
  11. ler_resto(C,S).
  12.  
  13. ler_resto(end_of_file, []).
  14. ler_resto(C, [C|R]) :-
  15. get_char(C2),
  16. ler_resto(C2, R).
  17.  
  18. ler_lista(L) --> ['('], pares(L), [')'].
  19.  
  20. pares([]) --> [].
  21. pares([Par|R]) --> par(Par), pares(R).
  22.  
  23. par([Linha,Pontos]) --> ['('], numero(CLinha), [' ', '.', ' '], numero(CPontos), [')'],
  24. { number_chars(Linha, CLinha), number_chars(Pontos, CPontos) }.
  25.  
  26. numero([]) --> [].
  27. numero([C|R]) --> [C], { is_digit(C) }, numero(R).
  28.  
  29. /* Exemplo de relação maior/2 */
  30.  
  31. maior(A,B) :- A > B.
  32.  
  33. /***** Código *****/
  34.  
  35. lista_maiores(L, Valor, Maiores) :-
  36. findall(Linha, (member([Linha,Pontos], L), maior(Pontos, Valor)), Maiores).
  37.  
  38. /***** Fim código *****/
  39.  
  40. process:-
  41. ler_chars(Chars),
  42. ler_lista(L, Chars, []),
  43. lista_maiores(L, 2, Maiores),
  44. write(Maiores), nl,
  45.  
  46. :- main.
Success #stdin #stdout 0.04s 6160KB
stdin
((1 . 2)(2 . 3)(5 . 3)(2 . 7)(10 . 20))
stdout
[2, 5, 2, 10]