Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Create ranged list scheme

Name: Anonymous 2012-02-11 14:04

Does anyone have a faster technique to build a list between a start and stop value? 
I made the straight forward

[code]

(define (mkrng min max)
  (cond
   ((< max min) '())
   (else(cons max (mkrng min (- max 1)))))) [\code]
 
But it is really slow for my application which needs lists of tens of millions of numbers

Name: Anonymous 2012-02-11 16:00

One way is to use delay and force.

(define (make-range x y)
  (if (> x y)
    '()
    (cons x (delay (make-range (+ x 1) y)))))


This will return a pair of x and a "promise" to evaluate (make-range (+ x 1) y) later. You can evaluate it by calling (force (cdr range)), where range is the pair returned by make-range.

Here's an example of how you would use it:

(define (sum-of-range range)
  (if (null? range)
    0
    (+ (car range)
       (sum-of-range (force (cdr range))))))

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List