90 lines
3 KiB
Text
90 lines
3 KiB
Text
Module OOP {
|
|
\\ Class is a global function (until this module end)
|
|
Class Null {
|
|
}
|
|
\\ Null is a pointer to an object returned from class Null()
|
|
Global Null->Null()
|
|
Class Node {
|
|
Public:
|
|
x, Group LeftNode, Group RightNode
|
|
Module preorder (visitor){
|
|
T->This
|
|
printtree(T)
|
|
sub printtree(T as pointer)
|
|
If T is Null then Exit sub
|
|
call event visitor, T=>x
|
|
printtree(T=>LeftNode)
|
|
printtree(T=>RightNode)
|
|
end sub
|
|
}
|
|
Module inorder (visitor){
|
|
T->This
|
|
printtree(T)
|
|
sub printtree(T as pointer)
|
|
If T is Null then Exit sub
|
|
printtree(T=>LeftNode)
|
|
call event visitor, T=>x
|
|
printtree(T=>RightNode)
|
|
end sub
|
|
}
|
|
Module postorder (visitor) {
|
|
T->This
|
|
printtree(T)
|
|
sub printtree(T as pointer)
|
|
If T is Null then Exit sub
|
|
printtree(T=>LeftNode)
|
|
printtree(T=>RightNode)
|
|
call event visitor, T=>x
|
|
end sub
|
|
}
|
|
Module level_order (visitor){
|
|
T->This
|
|
Stack New {
|
|
printtree(T)
|
|
if empty then exit
|
|
Read T
|
|
Loop
|
|
}
|
|
sub printtree(T as pointer)
|
|
If T is Null else
|
|
call event visitor, T=>x
|
|
Data T=>LeftNode, T=>RightNode
|
|
end if
|
|
end sub
|
|
}
|
|
Class:
|
|
\\ after class: anything exist one time,
|
|
\\ not included in final object
|
|
Module Node {
|
|
.LeftNode<=Null
|
|
.RightNode<=Null
|
|
Read .x
|
|
\\ read ? for optional values
|
|
Read ? .LeftNode, .RightNode
|
|
}
|
|
}
|
|
\\ NodeTree return a pointer to a new Node
|
|
Function NodeTree {
|
|
\\ ![] pass currrent stack to Node()
|
|
->Node(![])
|
|
}
|
|
|
|
Tree=NodeTree(1, NodeTree(2,NodeTree(4, NodeTree(7)), NodeTree(5)), NodeTree(3, NodeTree(6, NodeTree(8), NodeTree(9))))
|
|
Event PrintAnum {
|
|
read x
|
|
}
|
|
Function PrintThis(x) {
|
|
Print x;" ";
|
|
}
|
|
Event PrintAnum New PrintThis()
|
|
printnum=lambda PrintAnum (title$) -> {
|
|
Print
|
|
Print title$;
|
|
=PrintAnum
|
|
}
|
|
Tree=>preorder printnum("preorder: ")
|
|
Tree=>inorder printnum("inorder: ")
|
|
Tree=>postorder printnum("postorder: ")
|
|
Tree=>level_order printnum("level-order: ")
|
|
}
|
|
OOP
|