Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
cartesian([S | SS], [H | T]) :-
member(H, S),
( SS = []
-> T = []
; cartesian(SS, T)
).
?- cartesian([[a,b],[x,y,z],[p,q]],R).
R = [a, x, p] ;
R = [a, x, q] ;
R = [a, y, p] ;
R = [a, y, q] ;
R = [a, z, p] ;
R = [a, z, q] ;
R = [b, x, p] ;
R = [b, x, q] ;
R = [b, y, p] ;
R = [b, y, q] ;
R = [b, z, p] ;
R = [b, z, q].
или:
?- findall(R,cartesian([[a,b],[x,y,z],[p,q]],R),L).
L = [[a, x, p], [a, x, q], [a, y, p], [a, y, q], [a, z, p], [a, z, q], ...
Поиск декартова произведения с помощью LINQ