Cartesian product of two or more lists: Difference between revisions
Content deleted Content added
Implementation in Standard ML |
|||
Line 1,032: | Line 1,032: | ||
[] |
[] |
||
</pre> |
</pre> |
||
=={{header|Standard ML}}== |
|||
<lang sml>fun prodList (nil, _) = nil |
|||
| prodList ((x::xs), ys) = map (fn y => (x,y)) ys @ prodList (xs, ys) |
|||
fun naryProdList zs = foldl (fn (xs, ys) => map op:: (prodList (xs, ys))) [[]] (rev zs)</lang> |
|||
{{out}} |
|||
<pre>- prodList ([1, 2], [3, 4]); |
|||
val it = [(1,3),(1,4),(2,3),(2,4)] : (int * int) list |
|||
- prodList ([3, 4], [1, 2]); |
|||
val it = [(3,1),(3,2),(4,1),(4,2)] : (int * int) list |
|||
- prodList ([1, 2], []); |
|||
stdIn:8.1-8.22 Warning: type vars not generalized because of |
|||
value restriction are instantiated to dummy types (X1,X2,...) |
|||
val it = [] : (int * ?.X1) list |
|||
- naryProdList [[1776, 1789], [7, 12], [4, 14, 23], [0, 1]]; |
|||
val it = |
|||
[[1776,7,4,0],[1776,7,4,1],[1776,7,14,0],[1776,7,14,1],[1776,7,23,0], |
|||
[1776,7,23,1],[1776,12,4,0],[1776,12,4,1],[1776,12,14,0],[1776,12,14,1], |
|||
[1776,12,23,0],[1776,12,23,1],[1789,7,4,0],[1789,7,4,1],[1789,7,14,0], |
|||
[1789,7,14,1],[1789,7,23,0],[1789,7,23,1],[1789,12,4,0],[1789,12,4,1], |
|||
[1789,12,14,0],[1789,12,14,1],[1789,12,23,0],[1789,12,23,1]] |
|||
: int list list |
|||
- naryProdList [[1, 2, 3], [30], [500, 100]]; |
|||
val it = [[1,30,500],[1,30,100],[2,30,500],[2,30,100],[3,30,500],[3,30,100]] |
|||
: int list list |
|||
- naryProdList [[1, 2, 3], [], [500, 100]]; |
|||
val it = [] : int list list</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |