Pooh program example 18-sort.p
# use standard library sort procedure - with callback for comparison a = [ 10 , 3, 1, 5, 4, 9, 6, 7, 8, 2 ] sub cmpnum( a, b ) if a < b return -1 elsif a > b return 1 else return 0; end end sort( ~array a ~func cmpnum ) println( ~msg 'sorted numbers' ) for v a println( ~msg v ) end
sorted numbers 1 2 3 4 5 6 7 8 9 10Trace output for 18-sort.p
003|a = [ 10 , 3 , 1 , 5 , 4 , 9 , 6 , 7 , 8 , 2] 016|sort( ~array a:[ -> 10, -> 3, -> 1, -> 5, -> 4, -> 9, -> 6, -> 7, -> 8, -> 2 ] ~func sub cmpnum(~a , ~b) )... 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 3):false 008| else if (a:-> 10 > b:-> 3):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 5 < b:-> 4):false 008| else if (a:-> 5 > b:-> 4):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 1 < b:-> 4):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 3 < b:-> 1):false 008| else if (a:-> 3 > b:-> 1):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 3 < b:-> 4):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 4):false 008| else if (a:-> 10 > b:-> 4):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 5):false 008| else if (a:-> 10 > b:-> 5):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 9 < b:-> 6):false 008| else if (a:-> 9 > b:-> 6):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 8 < b:-> 2):false 008| else if (a:-> 8 > b:-> 2):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 7 < b:-> 2):false 008| else if (a:-> 7 > b:-> 2):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 7 < b:-> 8):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 6 < b:-> 2):false 008| else if (a:-> 6 > b:-> 2):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 6 < b:-> 7):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 9 < b:-> 7):false 008| else if (a:-> 9 > b:-> 7):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 9 < b:-> 8):false 008| else if (a:-> 9 > b:-> 8):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 1 < b:-> 2):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 3 < b:-> 2):false 008| else if (a:-> 3 > b:-> 2):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 3 < b:-> 6):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 4 < b:-> 6):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 5 < b:-> 6):true 007| return - 1 007| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 6):false 008| else if (a:-> 10 > b:-> 6):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 7):false 008| else if (a:-> 10 > b:-> 7):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 8):false 008| else if (a:-> 10 > b:-> 8):true 009| return 1 011| end # if 005| end 005| sub cmpnum(~a , ~b) 006| if (a:-> 10 < b:-> 9):false 008| else if (a:-> 10 > b:-> 9):true 009| return 1 011| end # if 005| end 016|sort( ~array a:[ -> 10, -> 3, -> 1, -> 5, -> 4, -> 9, -> 6, -> 7, -> 8, -> 2 ] ~func sub cmpnum(~a , ~b) ):Null 018|println( ~msg 'sorted numbers' )... 020|for v = 1 021| println( ~msg v:1 )... 020|end 020|for ... 020|for v = 2 021| println( ~msg v:2 )... 020|end 020|for ... 020|for v = 3 021| println( ~msg v:3 )... 020|end 020|for ... 020|for v = 4 021| println( ~msg v:4 )... 020|end 020|for ... 020|for v = 5 021| println( ~msg v:5 )... 020|end 020|for ... 020|for v = 6 021| println( ~msg v:6 )... 020|end 020|for ... 020|for v = 7 021| println( ~msg v:7 )... 020|end 020|for ... 020|for v = 8 021| println( ~msg v:8 )... 020|end 020|for ... 020|for v = 9 021| println( ~msg v:9 )... 020|end 020|for ... 020|for v = 10 021| println( ~msg v:10 )... 020|end 020|for ... 020|end # finish for loop