Subject: Sorting (was Re: How do I do this in dsssl/jade?) From: kubek@xxxxxxxxxxxx (kubek) Date: Tue, 15 Dec 1998 10:17:13 +0100 |
>>>>> "N.W." == Norman Walsh <ndw@xxxxxxxxxx> writes: N.W.> / "Glenn R. Kronschnabl" <grk@xxxxxxxxxxxxxxxx> was heard to N.W.> say: | I have an xml file that looks something like: [...] | [Q1 snipped ...] N.W.> Q2: Right now I am sorting/reordering N.W.> via perl-xml, but I assume I could | reorder the nodelist N.W.> using dsssl/jade. Anyone have some code I peruse? | | (Q1 is N.W.> more MUCH more important) N.W.> Are you saying that all the vcards are already in sorted N.W.> order? If so, what you want's not too hard. Sorting, that N.W.> would be a different kettle of fish altogether. Here is simple code for quicksort able to sort both lists and node-lists (sorry I forget the initial author for this scheme thing, maybe in Slib ??). As sorting a node-list or a simple list is essentially the same problem, i.e. sort a sequence of elements, there is a first function (called quicksort::generic) which acts as a "quicksort procedure maker". Thid first procedure defines a general quicksort operation for abstract sequences defined through the following procedures: - is-null? tests if the sequence is empty - first extracts the first element from the sequence - others gives all the elements from the sequence, except the first - concat is used for combining two sequences - add is used to add an element to the sequence - empty is the empty sequence The sorts for list and node-lists are then defined using this function by : (define quicksort (quicksort::generic null? car cdr append cons '())) (define nl-quicksort (quicksort::generic node-list-empty? node-list-first node-list-rest node-list node-list (empty-node-list))) (define quicksort::generic (lambda(is-null? first others concat add empty) (letrec ((collect ;; Collect is an helper function doing the real work (lambda (pivot ls lgroup rgroup less?) (if (is-null? ls) (concat (impl lgroup less?) (add pivot (impl rgroup less?))) (if (less? pivot (first ls)) (collect pivot (others ls) lgroup (add (first ls) rgroup) less?) (collect pivot (others ls) (add (first ls) lgroup) rgroup less?))))) (impl ;; impl first test some trivial sorting case and then call ;; the procedure collect (lambda (ls less?) (if (or (is-null? ls) (is-null? (others ls))) ls (collect (first ls) (others ls) empty empty less?))))) ;; we return the new defined procedure impl))) N.W.> DSSSList info and archive: N.W.> http://www.mulberrytech.com/dsssl/dssslist J.-M. Computing Center INSA Toulouse France DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: How do I do this in dsssl/jade?, Norman Walsh | Thread | Re: How do I do this in dsssl/jade?, Glenn R. Kronschnabl |
RE: Interesting Side-Effects Proble, Avi Kivity | Date | Re: jade translates certain things , Juliane Harbarth |
Month |