Objective: To implement operations with sets:
A⋃B={x|x∊A or x∊B}
The intersection of sets A and B is the set
A⋂B={x|x∊A and x∊B}
The difference of sets A and B is the set
A\B={x|x∊A and x∉B}
Symmetric difference of sets A and B is the set
A-B=(A\B)⋃(B\A)
For convenience and clarity creates a class multitude.
('multitude defclass) ('multitude defvar list) ('multitude defmethod list () list) ('multitude defmethod multitude (x) (nil setq list (nil if ((nil type-of x) = 'multitude) (x list) x))) ('multitude defmethod push (x) (nil setq list (nil cons x list))) ('multitude defmethod contain (x) (nil let (found) (nil try (list for i (nil if (x = i) (nil throw 'break))) break (nil setq found true)) found)) ('multitude defmethod ⋃ (m) (nil let ((union ('multitude newobject m))) (list for* x (nil if (nil not (union contain x)) (union push x))) union)) ('multitude defmethod ⋂ (m) (nil let ((inter ('multitude newobject)) (lockinter ('lock newobject))) (list for x (nil if (m contain x) (lockinter progn (inter push x)))) inter)) ('multitude defmethod \ (m) (nil let ((diff ('multitude newobject)) (lockdiff ('lock newobject))) (list for x (nil if (nil not (m contain x)) (lockdiff progn (diff push x)))) diff)) ('multitude defmethod - (m) (nil let ((a (this \ m)) (b (m \ this))) (a ⋃ b)))
The constructor can take an argument as a list or set.
Function contain uses parallelism. Way out of the parallel loop is implemented using exceptions.
Function ⋃ implements the sequential algorithm. In this task parallelism not available.
The function ⋂ can find control elements in parallel using the contain. But changing the result inter is protected by a lock lockinter.
Similarly, the function \ is implemented.
In the function - parallelism is achieved in the computation of variables a and b.