title: Prolog - Cartesian product calculator
body: <p>I need to create a Cartesian product calculator for Prolog. It should work like this:</p>
  
  <p>Input: <code>product([1,2,3], [a,b], X).</code></p>
  
  <p>Output: <code>X = [[1,a],[2,a],[3,a],[1,b],[2,b],[3,b]].</code></p>
  
  <p>I know there are examples on the Internet, but I wanted to write something myself.</p>
  
  <p>This is my code and I think it's pretty close, but for some reason it doesn't exactly work. Any ideas, guys?</p>
  
  <pre><code>% call new with 4 parameters (so we can keep List1 in memory)
  product(L1,L2,L3):- product(L1,L2,L3,L1).
  
  % stop when both List1 and List2 are empty
  product([], [], [], []).
  
  % first list is empty, recreate it and work it again with the next element of second list (and shorten memory)
  product([], [_|T2], List3, [H4|T4]):-
      product([H4|T4], T2, List3, T4).
  
  %go through first list and always first element of second list to our answer
  product([H1|T1], [H2|T2], [[H1,H2]|T3], List4):-
      product(T1, [H2|T2], T3, List4).
  </code></pre>