Subject: Re: processing character entities From: Brandon Ibach <bibach@xxxxxxxxxxxxxx> Date: Fri, 23 Jul 1999 11:32:28 -0500 |
Quoting Chris Maden <crism@xxxxxxxxxxx>: > This is what I do. It's really not that bad, just verbose. > > (define (process-text #!optional (snl (current-node))) > ;; this part is inefficient; I need to rewrite this to carry a node > ;; index instead of an actual list of nodes > (let p-t-loop ((this-node (node-list-first (children snl))) > (other-nodes (node-list-rest (children snl)))) > (if (node-list-empty? this-node) > (empty-sosofo) > (sosofo-append (case (node-property 'class-name > this-node) > ;; case clauses edited for brevity -BI > ) > (if (node-list-empty? other-nodes) > (empty-sosofo) > (p-t-loop (node-list-first other-nodes) > (node-list-rest other-nodes))))))) > In the interest of good practice (and possibly performance), you may want to try this variation: (define (process-text #!optional (snl (current-node))) (let p-t-loop ((this-node (node-list-first (children snl))) (other-nodes (node-list-rest (children snl))) (result (empty-sosofo))) (if (node-list-empty? this-node) result (p-t-loop (node-list-first other-nodes) (node-list-rest other-nodes) (sosofo-append result (case (node-property 'class-name this-node) ;; case clauses edited for brevity -BI )))))) This not only makes it tail-recursive, but also eliminates the double check (at start and end) for the empty list. On this note, a question for the more Scheme-knowledgeable among us. We know that a non-tail-recursive function will take up more space in memory as the stack grows with each call, but what is the performance impact? Does the fix I've supplied above really have the potential to make a significant impact? If it saves even a little time on each iteration of the loop, I'd bet it could make a significant difference in the overall running time of Chris' application, given that this routine probably processes just about every data character and sdata entity in his document. -Brandon :) DSSSList info and archive: http://www.mulberrytech.com/dsssl/dssslist
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: processing character entities, Chris Maden | Thread | Re: processing character entities, Alexander Taranov |
RE: [OpenJade] OpenJade 1.2.2 Relea, Avi Kivity | Date | Landscape tables, Weininger, Nicholas |
Month |