Comments 6
на прологе
тест:
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], ...
+2
а пример вызова CartesianProduct можно?
0
Спасибо, только что применил для вывода дистрибьютивности в логических выражениях.
0
Отмечу, что в оригинальном посте появилась ссылка на мысли другого разработчика на то же вычисление:
http://www.interact-sw.co.uk/iangblog/2010/07/28/
Там же доступны версии для других языков (Haskell, Closure) и ранних версий .NET:
http://www.interact-sw.co.uk/iangblog/2010/08/05/linq-cartesian-5
http://www.interact-sw.co.uk/iangblog/2010/07/28/
Там же доступны версии для других языков (Haskell, Closure) и ранних версий .NET:
http://www.interact-sw.co.uk/iangblog/2010/08/05/linq-cartesian-5
0
Sign up to leave a comment.
Поиск декартова произведения с помощью LINQ