Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Linguistic influences

From: joel:neely:fedex at: 12-May-2002 6:46

Hi, Ladislav, Ladislav Mecir wrote:
> 1) I didn't want to criticize the ineffectivity of the algorithm. > I would rather say, that what matters to me may be a "naturality" > of the algorithm. >
FWIW, the algorithm wasn't the point of my note. I really wish I had chosen a different example. The real point I wanted to focus on was the contrast between deeply nested expressions vs. a long sequence of word-setting expressions to build up the result in an incremental fashion, and the differences in "mental bookkeeping" required to read and understand each.
> 3) Volker is right, that the introduction of iteration using > FOREACH simplifies the code. For the comparison purposes, here > is an iterative version of FLAT-APPEND: > > flat-append: func [ > series [series! port!] > value [any-type!] > ] [ > either block? get/any 'value [ > foreach element value [ > flat-append :series get/any 'element > ] > ] [ > insert/only tail :series get/any 'value > ] > :series > ] >
Actually, that's still recursive! You refactored the "horizontal" recursion into the FOREACH, but left the "vertical" recursion in place. Here's a completely iterative version of the flattener: nb-flatten: func [ b [block!] /local front result ][ result: copy [] while [not empty? b][ either block? front: first b [ b: compose [(front) (next b)] ][ insert tail result front b: next b ] ] result ]
> 4) I noticed a paradox: the most effective way of assembling blocks > is to use APPEND (or INSERT TAIL), but we do not have it as a native. >
Good observation! -jn- -- ; Joel Neely joeldotneelyatfedexdotcom REBOL [] do [ do func [s] [ foreach [a b] s [prin b] ] sort/skip do function [s] [t] [ t: "" foreach [a b] s [repend t [b a]] t ] { | e s m!zauafBpcvekexEohthjJakwLrngohOqrlryRnsctdtiub} 2 ]