Add for/sum: and for/product: to TR.

original commit: 6a8011854be3c67dc9fe0f3b1e7ba119a28500bd
This commit is contained in:
Vincent St-Amour 2011-07-27 16:36:39 -04:00
parent aae4f8c4b5
commit fea766dfbb
3 changed files with 34 additions and 1 deletions

View File

@ -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)

View File

@ -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.

View File

@ -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 ...+)]