Most Prolog systems can answer Quizz 1 by using listing/1 . The result is often that rotten™ cryptic variables are replace by even more cryptic variables:
?- listing.
or(A, _) :-
call(A).
or(_, A) :-
call(A).
An answer to quizz 2 might also teach a valuable lesson about declarativity and meta programming in Prolog. You might try googling “cut transparency”.