Source file heap_demo.icn
#<p>
#  This file provides a class and main program that demonstrate many
#    of the features provided by the Heap class, including the ability
#    to specify operations using <i>closures</i> (See lang::Closure.)
#</p>
#<p>
#  Author: Steve Wampler (sbw@tapestry.tucson.az.us)
#   (Based on code by Kazimir Majorinc.)
#</p>
#<p>
# <i>This file is in the public domain.</i>
#</p>

import util,lang
import collection

#<p>
#   Demonstrate the Heap and Closure classes.
#</p>
class HeapDemo()

    method showTriple(x)
        return write("\t",x[1],", ",x[2],", ",x[3])
    end

    method processTriples(H)
        write("Inserted:")
        every showTriple(H.add([j := 1 to 5, ?0, j]))
        writes("Top: ")
        showTriple(H.top())
        write("All generated:")
        every showTriple(H.gen())
        write("Get:")
        while showTriple(H.get())
        write("Size of heap: ", H.size())
    end

    method processReals(H)
        write("Inserted:")
        every write("\t",(1 to 5, H.add(?0)))
        write("Top: ", H.top())
        write("All generated:")
        every write("\t",H.gen())
        write("Get:")
        while write("\t",H.get())
        write("Size of heap: ", H.size())
    end

    method header(msg)
        write("==============")
        write(msg)
        write("==============")
    end

    initially # demonstration and test
        header("Triplets, sorted by 2nd coordinate")
        processTriples(Heap(, Closure("[]",Arg,2) ))

        header("Heap of reals, sorted by their own value")
        processReals(Heap())

        header("Heap of reals, sorted by inverse order.")
        processReals(Heap(, Closure("*",-1)))
     
        header("Heap of reals, sorted by reverse order.")
        processReals(Heap(,,">"))
     
        header("Heap of reals, minimal are those closest to 1/2.")
        processReals(Heap(, heap_demo2 ))

        header("Heap of reals, sorted by their own value, non-empty start")
        processReals(Heap([0.2,0.3,0.1,0.5,0.4]))
end

#<p><i>Internal use only</i></p>
procedure heap_demo2(x); return abs(x-0.5); end

procedure main()
    HeapDemo()
end

This page produced by UniDoc on 2021/04/15 @ 23:59:43.