Set: Difference between revisions

2,620 bytes added ,  5 years ago
no edit summary
No edit summary
Line 2,765:
 
return setmetatable({}, { __call = new })</lang>
=={{header|M2000 Interpreter}}==
A tuple is a referenced type of an array, with variant type for each item (may also be a reference to another tuple). The empty tuple is this (,), and the one item is this (1,), and two items (1,2)
For search in a tuple we have O(N).
 
<lang M2000 Interpreter>
Module Sets {
setA=("apple", "cherry", "grape")
setB=("banana","cherry", "date")
Print Len(setA)=3 'true
Print setA#pos("apple")>=0=true ' exist
Print setA#pos("banana")>=0=False ' not exist
intersection=lambda SetB (x$)-> SetB#pos(x$)>=0
SetC=SetA#filter(intersection,(,))
Print SetC
Difference= lambda (aSet)->{
=lambda aSet (x$)-> aSet#pos(x$)<0
}
IsetC=SetB#filter(Difference(setA),(,))
Print SetC
SetC=SetA#filter(Difference(setB),(,))
Print SetC
k=each(setB)
SetC=cons(setA)
while k
if setA#pos(SetB#val$(k^))<0 then Append SetC, (SetB#val$(k^),)
end while
Print SetC
\\ subset if items exists in same order
Print SetA#pos("cherry","grape")>=0 ' true ' is a subset of SetA
Print SetA#pos(("apple", "cherry"))>=0 ' true ' is a subset of SetA
Print SetA#pos(("apple","grape"))>=0 ' false ' is not a subset of SetA in that order
\\ subset in any position
fold1=lambda (aSet)-> {
=lambda aSet (x$, cond) ->{
push cond and aSet#pos(x$)>=0
}
}
SetC=("banana", "date")
print SetC#Fold(fold1(SetA), True) ' False
print SetC#Fold(fold1(SetB), True) ' True
SetC=("cherry",)
print SetC#Fold(fold1(SetA), True) ' True
print SetC#Fold(fold1(SetB), True) ' True
\\ Mutation
\\ change value at position 0
return SetC, 0:="banana"
print SetC#Fold(fold1(SetA), True) ' False
print SetC#Fold(fold1(SetB), True) ' True
\\ equality
SetC=Cons(SetA) ' we get a copy of one or more tuple
\\ SetC is subset of SetA and SetA is subset of SetC
Print SetC#Fold(fold1(SetA), True)=SetA#Fold(fold1(SetC), True) ' True
\\ another way
Print Len(SetC#filter(Difference(setA),(,)))=0 ' true \\ difference is an empty tuple
append SetC, SetB
Print Len(SetC)=6 ' true
print SetC#pos(0 ->"cherry")=1 ' true
print SetC#pos(2 -> "cherry")=4 ' true
print SetC#pos(5 -> "cherry")=-1 ' true
print SetC#pos(0 -> "banana","cherry")=3 ' true
print SetC#pos( "banana","cherry")=3 ' true
mapU=lambda ->{
push ucase$(letter$)
}
fold2=lambda (x$, k$)->{
push replace$(")(", ", ",k$+"("+quote$(x$)+")")
}
Print SetC#map(mapU)#fold$(fold2, "") ' ("APPLE", "CHERRY", "GRAPE", "BANANA", "CHERRY", "DATE")
Print SetC#map(mapU) ' APPLE CHERRY GRAPE BANANA CHERRY DATE
Print SetC#fold$(fold2, "") ' ("apple", "cherry", "grape", "banana", "cherry", "date")
}
Sets
</lang>
 
 
=={{header|Maple}}==
Anonymous user