From d2112c965257cd985e06f0528623640fffb11bd7 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 16 Dec 2011 09:33:30 -0700 Subject: [PATCH] enable R5RS `map' & `for-each' (i.e., `mmap' and `mfor-each') inlining original commit: 4b1f74671429f6d8955c6afa98569821fec9e8c7 --- collects/racket/mpair.rkt | 66 ++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/collects/racket/mpair.rkt b/collects/racket/mpair.rkt index 5fbb9d1..6ef864b 100644 --- a/collects/racket/mpair.rkt +++ b/collects/racket/mpair.rkt @@ -1,6 +1,7 @@ #lang scheme/base -(require (for-syntax scheme/base)) +(require (for-syntax scheme/base) + "performance-hint.rkt") (provide mmap mfor-each @@ -23,40 +24,41 @@ list->mlist mlistof) -(define mmap - (case-lambda - [(f l) (let loop ([l l]) - (cond - [(null? l) null] - [else (mcons (f (mcar l)) (loop (mcdr l)))]))] - [(f l1 l2) (let loop ([l1 l1][l2 l2]) - (cond - [(null? l1) null] - [else (mcons (f (mcar l1) (mcar l2)) - (loop (mcdr l1) (mcdr l2)))]))] - [(f l . ls) (let loop ([l l][ls ls]) +(begin-encourage-inline + (define mmap + (case-lambda + [(f l) (let loop ([l l]) + (cond + [(null? l) null] + [else (mcons (f (mcar l)) (loop (mcdr l)))]))] + [(f l1 l2) (let loop ([l1 l1][l2 l2]) (cond - [(null? l) null] - [else (mcons (apply f (mcar l) (map mcar ls)) - (loop (mcdr l) (map mcdr ls)))]))])) + [(null? l1) null] + [else (mcons (f (mcar l1) (mcar l2)) + (loop (mcdr l1) (mcdr l2)))]))] + [(f l . ls) (let loop ([l l][ls ls]) + (cond + [(null? l) null] + [else (mcons (apply f (mcar l) (map mcar ls)) + (loop (mcdr l) (map mcdr ls)))]))])) -(define mfor-each - (case-lambda - [(f l) (let loop ([l l]) - (cond - [(null? l) (void)] - [else (f (mcar l)) - (loop (mcdr l))]))] - [(f l1 l2) (let loop ([l1 l1][l2 l2]) - (cond - [(null? l1) (void)] - [else (f (mcar l1) (mcar l2)) - (loop (mcdr l1) (mcdr l2))]))] - [(f l . ls) (let loop ([l l][ls ls]) + (define mfor-each + (case-lambda + [(f l) (let loop ([l l]) + (cond + [(null? l) (void)] + [else (f (mcar l)) + (loop (mcdr l))]))] + [(f l1 l2) (let loop ([l1 l1][l2 l2]) (cond - [(null? l) (void)] - [else (apply f (mcar l) (map mcar ls)) - (loop (mcdr l) (map mcdr ls))]))])) + [(null? l1) (void)] + [else (f (mcar l1) (mcar l2)) + (loop (mcdr l1) (mcdr l2))]))] + [(f l . ls) (let loop ([l l][ls ls]) + (cond + [(null? l) (void)] + [else (apply f (mcar l) (map mcar ls)) + (loop (mcdr l) (map mcdr ls))]))]))) (define (list->mlist l) (cond