|
|
|
|
|
|
|
|
|
|
|
class set |
|
{ |
|
rule __init__ ( ) |
|
{ |
|
} |
|
|
|
rule add ( elements * ) |
|
{ |
|
for local e in $(elements) |
|
{ |
|
if ! $($(e)) |
|
{ |
|
$(e) = 1 ; |
|
self.result += $(e) ; |
|
} |
|
} |
|
} |
|
|
|
rule contains ( element ) |
|
{ |
|
return $($(element)) ; |
|
} |
|
|
|
rule list ( ) |
|
{ |
|
return $(self.result) ; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|
|
rule difference ( set1 * : set2 * ) |
|
{ |
|
local result = ; |
|
for local element in $(set1) |
|
{ |
|
if ! ( $(element) in $(set2) ) |
|
{ |
|
result += $(element) ; |
|
} |
|
} |
|
return $(result) ; |
|
} |
|
|
|
NATIVE_RULE set : difference ; |
|
|
|
|
|
|
|
|
|
rule intersection ( set1 * : set2 * ) |
|
{ |
|
local result ; |
|
for local v in $(set1) |
|
{ |
|
if $(v) in $(set2) |
|
{ |
|
result += $(v) ; |
|
} |
|
} |
|
return $(result) ; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
rule equal ( set1 * : set2 * ) |
|
{ |
|
if $(set1) in $(set2) && ( $(set2) in $(set1) ) |
|
{ |
|
return true ; |
|
} |
|
} |
|
|
|
|
|
rule __test__ ( ) |
|
{ |
|
import assert ; |
|
|
|
assert.result 0 1 4 6 8 9 : difference 0 1 2 3 4 5 6 7 8 9 : 2 3 5 7 ; |
|
assert.result 2 5 7 : intersection 0 1 2 4 5 6 7 8 9 : 2 3 5 7 ; |
|
|
|
assert.true equal : ; |
|
assert.true equal 1 1 2 3 : 3 2 2 1 ; |
|
assert.false equal 2 3 : 3 2 2 1 ; |
|
} |
|
|