48 lines
1.2 KiB
Text
48 lines
1.2 KiB
Text
{def H.sort
|
|
{def H.sort.i
|
|
{lambda {:f :x :a}
|
|
{if {A.empty? :a}
|
|
then {A.new :x}
|
|
else {if {:f :x {A.first :a}}
|
|
then {A.addfirst! :x :a}
|
|
else {A.addfirst! {A.first :a} {H.sort.i :f :x {A.rest :a}}} }}}}
|
|
{def H.sort.r
|
|
{lambda {:f :a1 :a2}
|
|
{if {A.empty? :a1}
|
|
then :a2
|
|
else {H.sort.r :f {A.rest :a1} {H.sort.i :f {A.first :a1} :a2}} }}}
|
|
{lambda {:f :a}
|
|
{H.sort.r :f :a {A.new}} }}
|
|
-> H.sort
|
|
|
|
{def H.display
|
|
{lambda {:h}
|
|
{table
|
|
{tr {S.map {{lambda {:h :i} {td {car {A.get :i :h}}}} :h}
|
|
{S.serie 0 {- {A.length :h} 1}}}}
|
|
{tr {S.map {{lambda {:h :i} {td {cdr {A.get :i :h}}}} :h}
|
|
{S.serie 0 {- {A.length :h} 1}}}}
|
|
}}}
|
|
-> H.display
|
|
|
|
1) an array of pairs:
|
|
{def H {A.new {cons Joe 5531}
|
|
{cons Adam 2341}
|
|
{cons Bernie 122}
|
|
{cons Walter 1234}
|
|
{cons David 19}}}
|
|
-> H
|
|
|
|
2) display sorted by names:
|
|
{H.display
|
|
{H.sort {lambda {:a :b} {< {lexicographic {car :a} {car :b}} 0}} {H}}}
|
|
->
|
|
Adam Bernie David Joe Walter
|
|
2341 122 19 5531 1234
|
|
|
|
3) display sorted by values:
|
|
{H.display
|
|
{H.sort {lambda {:a :b} {< {cdr :a} {cdr :b}}} {H}}}
|
|
->
|
|
David Bernie Walter Adam Joe
|
|
19 122 1234 2341 5531
|