Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
73
Task/Set/M2000-Interpreter/set.m2000
Normal file
73
Task/Set/M2000-Interpreter/set.m2000
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue