/* (c) 1999-2005, Rony G. Flatscher, Wirtschaftsuniversitaet Wien, Austria Europe
A *possible* solution to excercise # 16
*/
Fruit_Bag = .bag~of( "apple", "apple", "pear", "strawberry", "apple", "banana", -
"plum", "plum", "banana", "apple", "pear", "melon", -
"peanut", "peanut", "peanut", "peanut", "peanut", "apple", -
"peanut", "pineapple", "banana", "plum", "pear", "pear", -
"plum", "plum", "banana", "apple", "pear", "melon", -
"peanut", "peanut", "peanut", "apple", "peanut", "pineapple", -
"banana", "peanut", "peanut", "peanut", "peanut", "peanut", -
"apple", "peanut", "pineapple", "banana", "peanut", "melon", -
"mango", "peanut", "peanut", "apple", "peanut", "pineapple", -
"banana", "pear" )
Ordered_List = .list~of("apple", "banana", "pear", "plum")
Fruit_Set = .set~new~union(Fruit_Bag)
Ordered_Fruit_Set = Fruit_Set~intersection(Ordered_List)
Other_Fruit_Set = Fruit_Set~difference(Ordered_List)
CALL dump Fruit_Bag, Ordered_Fruit_Set, "Received Fruits (ordered)", .false
CALL dump Fruit_Bag, Other_Fruit_Set, "Received Fruits (not ordered)", .false
CALL dump Fruit_Bag, Ordered_List, "Received Fruits (ordered)", .true
CALL dump Fruit_Bag, Other_Fruit_Set, "Received Fruits (not ordered)", .true
::ROUTINE dump
USE ARG bag, collection, title, bWithCount
bWithCount = (bWithCount="1")
SAY title
tmpString = ""
DO fruit OVER collection
IF \(bag~hasindex(fruit)) THEN ITERATE
IF bWithCount THEN tmpString = ":" RIGHT(bag~allat(fruit)~items, 3)
SAY RIGHT(fruit, 21) || tmpString
END
SAY
RETURN