Cartesian product of two or more lists: Difference between revisions
Content added Content deleted
(add RPL) |
(Added various BASIC dialects.) |
||
Line 819: | Line 819: | ||
(.3 30 100) |
(.3 30 100) |
||
.</pre> |
.</pre> |
||
=={{header|BASIC}}== |
|||
==={{header|Applesoft BASIC}}=== |
|||
{{works with|Chipmunk Basic}} |
|||
{{works with|GW-BASIC}} |
|||
<syntaxhighlight lang="qbasic">100 HOME : rem 10 CLS FOR Chipmunk Basic & GW-BASIC |
|||
110 DIM array(2,2) |
|||
120 array(1,1) = 1 : array(1,2) = 2 |
|||
130 array(2,1) = 3 : array(2,2) = 4 |
|||
140 GOSUB 190 |
|||
150 array(1,1) = 3 : array(1,2) = 4 |
|||
160 array(2,1) = 1 : array(2,2) = 2 |
|||
170 GOSUB 190 |
|||
180 END |
|||
190 rem SUB cartesian(list) |
|||
200 u1 = 2 : u2 = 2 |
|||
210 FOR i = 1 TO u1 |
|||
220 PRINT "{ "; |
|||
230 FOR j = 1 TO u2 |
|||
240 PRINT array(i,j); |
|||
250 IF j < u1 THEN PRINT ", "; |
|||
260 NEXT j |
|||
270 PRINT "}"; |
|||
280 IF i < u2 THEN PRINT " x "; |
|||
290 NEXT i |
|||
300 PRINT " = { "; |
|||
310 FOR i = 1 TO u1 |
|||
320 FOR j = 1 TO u2 |
|||
330 PRINT "{ "; array(1,i); ", "; array(2,j); "} "; |
|||
340 IF i < u2 THEN PRINT ", "; |
|||
350 IF i => u2 THEN IF j < u1 THEN PRINT ", "; |
|||
360 NEXT j |
|||
370 NEXT i |
|||
380 PRINT "}" |
|||
390 RETURN</syntaxhighlight> |
|||
==={{header|BASIC256}}=== |
|||
<syntaxhighlight lang="vb">arraybase 1 |
|||
subroutine cartesian(list) |
|||
u1 = list[?][] |
|||
u2 = list[][?] |
|||
for i = 1 to u1 |
|||
print "{"; |
|||
for j = 1 to u2 |
|||
print list[i,j]; |
|||
if j < u1 then print ", "; |
|||
next |
|||
print "}"; |
|||
if i < u2 then print " x "; |
|||
next i |
|||
print " = { "; |
|||
for i = 1 to u1 |
|||
for j = 1 to u2 |
|||
print "{"; list[1, i]; ", "; list[2, j]; "} "; |
|||
if i < u2 then |
|||
print ", "; |
|||
else |
|||
if j < u1 then print ", "; |
|||
end if |
|||
next j |
|||
next i |
|||
print "}" |
|||
end subroutine |
|||
dim list1 = {{1,2},{3,4}} |
|||
dim list2 = {{3,4},{1,2}} |
|||
call cartesian(list1) |
|||
call cartesian(list2) |
|||
end</syntaxhighlight> |
|||
{{out}} |
|||
<pre>{1, 2} x {3, 4} = { {1, 3} , {1, 4} , {2, 3} , {2, 4} } |
|||
{3, 4} x {1, 2} = { {3, 1} , {3, 2} , {4, 1} , {4, 2} }</pre> |
|||
==={{header|Chipmunk Basic}}=== |
|||
{{works with|Chipmunk Basic|3.6.4}} |
|||
<syntaxhighlight lang="qbasic">100 cls |
|||
110 dim array(2,2) |
|||
120 array(1,1) = 1 : array(1,2) = 2 |
|||
130 array(2,1) = 3 : array(2,2) = 4 |
|||
140 gosub 190 |
|||
150 array(1,1) = 3 : array(1,2) = 4 |
|||
160 array(2,1) = 1 : array(2,2) = 2 |
|||
170 gosub 190 |
|||
180 end |
|||
190 rem sub cartesian(list) |
|||
200 u1 = 2 : u2 = 2 |
|||
210 for i = 1 to u1 |
|||
220 print "{ "; |
|||
230 for j = 1 to u2 |
|||
240 print array(i,j); |
|||
250 if j < u1 then print ", "; |
|||
260 next j |
|||
270 print "}"; |
|||
280 if i < u2 then print " x "; |
|||
290 next i |
|||
300 print " = { "; |
|||
310 for i = 1 to u1 |
|||
320 for j = 1 to u2 |
|||
330 print "{ ";array(1,i);", ";array(2,j);"} "; |
|||
340 if i < u2 then |
|||
350 print ", "; |
|||
360 else |
|||
370 if j < u1 then print ", "; |
|||
380 endif |
|||
390 next j |
|||
400 next i |
|||
410 print "}" |
|||
420 return</syntaxhighlight> |
|||
==={{header|GW-BASIC}}=== |
|||
{{works with|Chipmunk Basic}} |
|||
{{works with|PC-BASIC|any}} |
|||
{{works with|QBasic}} |
|||
{{works with|MSX-BASIC}} |
|||
<syntaxhighlight lang="qbasic">100 CLS |
|||
110 DIM ARR(2,2) |
|||
120 ARR(1,1) = (1) : ARR(1,2) = (2) |
|||
130 ARR(2,1) = (3) : ARR(2,2) = (4) |
|||
140 GOSUB 190 |
|||
150 ARR(1,1) = 3 : ARR(1,2) = 4 |
|||
160 ARR(2,1) = 1 : ARR(2,2) = 2 |
|||
170 GOSUB 190 |
|||
180 END |
|||
190 REM SUB cartesian(list) |
|||
200 U1 = 2 : U2 = 2 |
|||
210 FOR I = 1 TO U1 |
|||
220 PRINT "{"; |
|||
230 FOR J = 1 TO U2 |
|||
240 PRINT ARR(I,J); |
|||
250 IF J < U1 THEN PRINT ","; |
|||
260 NEXT J |
|||
270 PRINT "}"; |
|||
280 IF I < U2 THEN PRINT " x "; |
|||
290 NEXT I |
|||
300 PRINT " = {"; |
|||
310 FOR I = 1 TO U1 |
|||
320 FOR J = 1 TO U2 |
|||
330 PRINT "{"; ARR(1,I); ","; ARR(2,J); "}"; |
|||
340 IF I < U2 THEN PRINT ", "; |
|||
350 IF I => U2 THEN IF J < U1 THEN PRINT ","; |
|||
360 NEXT J |
|||
370 NEXT I |
|||
380 PRINT "}" |
|||
390 RETURN</syntaxhighlight> |
|||
==={{header|MSX Basic}}=== |
|||
{{works with|MSX BASIC|any}} |
|||
The [[#GW-BASIC|GW-BASIC]] solution works without any changes. |
|||
==={{header|QBasic}}=== |
|||
The [[#GW-BASIC|GW-BASIC]] solution works without any changes. |
|||
==={{header|Run BASIC}}=== |
|||
{{works with|Just BASIC}} |
|||
{{works with|Liberty BASIC}} |
|||
<syntaxhighlight lang="vb">cls |
|||
dim array(2,2) |
|||
array(1,1) = 1 : array(1,2) = 2 |
|||
array(2,1) = 3 : array(2,2) = 4 |
|||
gosub [cartesian] |
|||
array(1,1) = 3 : array(1,2) = 4 |
|||
array(2,1) = 1 : array(2,2) = 2 |
|||
gosub [cartesian] |
|||
end |
|||
[cartesian] |
|||
u1 = 2 : u2 = 2 |
|||
for i = 1 to u1 |
|||
print "{"; |
|||
for j = 1 to u2 |
|||
print array(i,j); |
|||
if j < u1 then print ","; |
|||
next j |
|||
print "}"; |
|||
if i < u2 then print " x "; |
|||
next i |
|||
print " = {"; |
|||
for i = 1 to u1 |
|||
for j = 1 to u2 |
|||
print "{"; array(1,i); ","; array(2,j); "}"; |
|||
if i < u2 then |
|||
print ","; |
|||
else |
|||
if j < u1 then print ","; |
|||
end if |
|||
next j |
|||
next i |
|||
print "}" |
|||
return</syntaxhighlight> |
|||
=={{header|C}}== |
=={{header|C}}== |
||
Recursive implementation for computing the Cartesian product of lists. In the pursuit of making it as interactive as possible, the parsing function ended up taking the most space. The product set expression must be supplied enclosed by double quotes. Prints out usage on incorrect invocation. |
Recursive implementation for computing the Cartesian product of lists. In the pursuit of making it as interactive as possible, the parsing function ended up taking the most space. The product set expression must be supplied enclosed by double quotes. Prints out usage on incorrect invocation. |