From fea766dfbbb3dfabfbc6d55d94501982047a520b Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Wed, 27 Jul 2011 16:36:39 -0400 Subject: [PATCH] Add for/sum: and for/product: to TR. original commit: 6a8011854be3c67dc9fe0f3b1e7ba119a28500bd --- collects/tests/typed-scheme/succeed/for.rkt | 29 +++++++++++++++++++ collects/typed-scheme/base-env/prims.rkt | 4 ++- .../scribblings/reference/special-forms.scrbl | 2 ++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/collects/tests/typed-scheme/succeed/for.rkt b/collects/tests/typed-scheme/succeed/for.rkt index 5569e268..d7177415 100644 --- a/collects/tests/typed-scheme/succeed/for.rkt +++ b/collects/tests/typed-scheme/succeed/for.rkt @@ -113,3 +113,32 @@ (k : Integer '(100 200 300))) (+ acc i j k)) 1998) + +(check = + (for/sum: : Integer + ([i : Integer (in-range 10)]) + i) + 45) +(check = + (for/sum: : Integer + ([i : Integer (in-range 10)] + [j : Integer (in-range 10)]) + (+ i j)) + 90) + +(check = + (for/product: : Integer + ([i : Integer (in-range 10)]) + i) + 0) +(check = + (for/product: : Integer + ([i : Integer (in-range 1 10)]) + i) + 362880) +(check = + (for/product: : Integer + ([i : Integer (in-range 1 10)] + [j : Integer (in-range 1 10)]) + (+ i j)) + 185794560) diff --git a/collects/typed-scheme/base-env/prims.rkt b/collects/typed-scheme/base-env/prims.rkt index 00857fc4..06b394d4 100644 --- a/collects/typed-scheme/base-env/prims.rkt +++ b/collects/typed-scheme/base-env/prims.rkt @@ -668,7 +668,9 @@ This file defines two sorts of primitives. All of them are provided into any mod (for/first: for/first) (for/last: for/last) (for/vector: for/vector) - (for/flvector: for/flvector)) + (for/flvector: for/flvector) + (for/sum: for/sum) + (for/product: for/product)) ;; Unlike with the above, the inferencer can handle any number of #:when ;; clauses with these 2. diff --git a/collects/typed-scheme/scribblings/reference/special-forms.scrbl b/collects/typed-scheme/scribblings/reference/special-forms.scrbl index d5a4e1dc..3dacd9da 100644 --- a/collects/typed-scheme/scribblings/reference/special-forms.scrbl +++ b/collects/typed-scheme/scribblings/reference/special-forms.scrbl @@ -147,6 +147,8 @@ variants. @defform[(for/or: type-ann-maybe (for:-clause ...) expr ...+)] @defform[(for/first: type-ann-maybe (for:-clause ...) expr ...+)] @defform[(for/last: type-ann-maybe (for:-clause ...) expr ...+)] +@defform[(for/sum: type-ann-maybe (for:-clause ...) expr ...+)] +@defform[(for/product: type-ann-maybe (for:-clause ...) expr ...+)] @defform[(for*/list: type-ann-maybe (for:-clause ...) expr ...+)] @defform[(for*/hash: type-ann-maybe (for:-clause ...) expr ...+)] @defform[(for*/hasheq: type-ann-maybe (for:-clause ...) expr ...+)]