74 lines
2.3 KiB
Plaintext
74 lines
2.3 KiB
Plaintext
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
|