Skip to content

Instantly share code, notes, and snippets.

@sir-pinecone
Created April 12, 2017 15:13
Show Gist options
  • Save sir-pinecone/fef963df4486a74f7010a11700121cf7 to your computer and use it in GitHub Desktop.
Save sir-pinecone/fef963df4486a74f7010a11700121cf7 to your computer and use it in GitHub Desktop.
Experiments with writing range functions in Scheme.
; Uses Berkeley's (sentence) helper - slow after 1-5k, but supports larger range than `range-se-recur`
(define (range-se-iter start end)
(define (iter c ret)
(if (= c end)
ret
(iter (+ c 1) (se ret c))))
(iter start '()))
; Uses Berkeley's (sentence) helper - quite slow after 1-5k, seg faults around 1-15k
(define (range-se-recur start end)
(if (= start end)
'()
(se start (range-se-recur (+ start 1) end))))
; Fast
; ~300 ms for 1-100k
; ~4s for 1-1M
(define (range-iter start end)
(define (iter c ret)
(if (< c start)
ret
(iter (- c 1) (cons c ret))))
(iter (- end 1) '()))
; Fast but segfaults around 1-22k
(define (range-recur start end)
(if (= start end)
'()
(cons start (range-recur (+ start 1) end))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment