fork(3) download
  1. count([], _, 0).
  2. count([H|T], H, R) :- count(T, H, RT), R is RT + 1.
  3. count([H|T], X, R) :- H \= X, count(T, X, R).
  4.  
  5. add_if_count_is_one(H, T, RT, R) :- count(T, H, 1), R is RT + 1.
  6. add_if_count_is_one(H, T, R, R) :- count(T, H, X), X \= 1.
  7.  
  8. num_pairs([], 0).
  9. num_pairs([H|T], R) :- delete(T, H, TT),
  10. num_pairs(TT, RT),
  11. add_if_count_is_one(H, T, RT, R).
  12.  
  13. :- num_pairs([4,1,1,1,4], N), write(N).
Success #stdin #stdout 0.03s 6160KB
stdin
Standard input is empty
stdout
1