Set: Difference between revisions
Content added Content deleted
No edit summary |
(→{{header|RPL}}: better versions of INTER and DIFFL, handling now repeated items) |
||
Line 6,856: | Line 6,856: | ||
"Azerty" #4 3.14 3 →LIST |
"Azerty" #4 3.14 3 →LIST |
||
{{works with|Halcyon Calc|4.2.7}} |
{{works with|Halcyon Calc|4.2.7}} |
||
We first need a command to remove an item for a list |
|||
≪ DUP2 1 + OVER SIZE SUB ROT ROT |
|||
IF DUP 1 == THEN DROP2 ELSE |
|||
1 SWAP 1 - SUB SWAP + |
|||
END |
|||
≫ '<span style="color:blue">POPL</span>' STO <span style="color:grey">@ ''( { a1 .. ak .. an } k → { a1 .. an } )''</span> |
|||
{| class="wikitable" |
{| class="wikitable" |
||
! RPL code |
! RPL code |
||
Line 6,861: | Line 6,867: | ||
|- |
|- |
||
| |
| |
||
≪ POS SIGN ≫ ' |
≪ POS SIGN ≫ '<span style="color:blue">IN?</span>' STO |
||
≪ → a b |
≪ → a b |
||
Line 6,867: | Line 6,873: | ||
b j GET '''IF''' a OVER POS '''THEN''' DROP '''ELSE''' + '''END''' |
b j GET '''IF''' a OVER POS '''THEN''' DROP '''ELSE''' + '''END''' |
||
'''NEXT''' |
'''NEXT''' |
||
≫ ≫ ' |
≫ ≫ '<span style="color:blue">UNION</span>' STO |
||
≪ → a b |
≪ → a b |
||
≪ { } b |
|||
1 a SIZE '''FOR''' j |
|||
a j GET |
|||
'''IF''' DUP2 POS '''THEN''' |
|||
LAST ROT SWAP <span style="color:blue">POPL</span> |
|||
ROT ROT + SWAP |
|||
'''ELSE''' DROP '''END''' |
|||
'''NEXT''' DROP |
|||
≫ ≫ ‘<span style="color:blue">INTER</span>’ STO |
|||
≪ → a b |
≪ → a b |
||
≪ { } b |
|||
1 a SIZE '''FOR''' j |
|||
a j GET |
|||
'''IF''' DUP2 POS NOT '''THEN''' |
|||
LAST ROT SWAP <span style="color:blue">POPL</span> |
|||
ROT ROT + SWAP |
|||
'''ELSE''' DROP '''END''' |
|||
'''NEXT''' DROP |
|||
≫ ≫ ‘<span style="color:blue">DIFFL</span>’ STO |
|||
≪ → a b |
≪ → a b |
||
Line 6,885: | Line 6,901: | ||
'''IF''' b a j GET POS NOT '''THEN''' 1 SF a SIZE 'j' STO '''END''' |
'''IF''' b a j GET POS NOT '''THEN''' 1 SF a SIZE 'j' STO '''END''' |
||
'''NEXT''' 1 FC? |
'''NEXT''' 1 FC? |
||
≫ ≫ ' |
≫ ≫ '<span style="color:blue">INCL</span>'?' STO |
||
≪ DUP2 '''INCL?''' ROT ROT SWAP '<span style="color:blue">DIFFL</span>' AND |
|||
≫ ' |
≫ '<span style="color:blue">SAME?</span>' STO |
||
| |
| |
||
<span style="color:blue">IN?</span> ''( {A} m -- boolean )'' // 1 if m ∈ A |
|||
<span style="color:blue">UNION</span> ''( {A} {B} -- {A ∪ B} )'' |
|||
Scan {B}... |
Scan {B}... |
||
... and add to {A} all {B} items not already in {A} |
... and add to {A} all {B} items not already in {A} |
||
⚫ | |||
⚫ | |||
Put a copy of {B} in stack |
|||
⚫ | |||
Scan {A} |
Scan {A} |
||
⚫ | |||
... and keep {A} items also in {B} |
|||
if {A} item in copy of {B} |
|||
⚫ | |||
remove it from copy of {B} |
|||
⚫ | |||
add it to result |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
... and keep {A} items not in {B} |
|||
⚫ | |||
⚫ | |||
Put a copy of {B} in stack |
|||
⚫ | |||
⚫ | |||
⚫ | |||
if {A} item not in copy of {B} |
|||
remove it from copy of {B} |
|||
add it to result |
|||
⚫ | |||
Scan {A}... |
Scan {A}... |
||
... and break loop if an {A} item is not in {B} |
... and break loop if an {A} item is not in {B} |
||
return flag 1, set if loop has been broken |
return flag 1, set if loop has been broken |
||
<span style="color:blue">SAME</span> ''( {A} {B} -- boolean )'' // true if {A} = {B} |
|||
{A} = {B} <=> {A} ⊆ {B} and {B} ⊆ {A} |
{A} = {B} <=> {A} ⊆ {B} and {B} ⊆ {A} |
||
|} |
|} |