From 6e2e84664da60e82434f907d7274fcc88e47e11f Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Sat, 11 Aug 2012 23:10:31 -0700 Subject: [PATCH] Move list-set and list-update to unstable/list. --- collects/typed-racket/rep/rep-utils.rkt | 12 +------ collects/typed-racket/typecheck/tc-envops.rkt | 1 + collects/typed-racket/utils/utils.rkt | 13 ------- collects/unstable/list.rkt | 20 +++++++++++ collects/unstable/scribblings/list.scrbl | 34 +++++++++++++++++++ 5 files changed, 56 insertions(+), 24 deletions(-) diff --git a/collects/typed-racket/rep/rep-utils.rkt b/collects/typed-racket/rep/rep-utils.rkt index bef2b4128c..8fc19f351f 100644 --- a/collects/typed-racket/rep/rep-utils.rkt +++ b/collects/typed-racket/rep/rep-utils.rkt @@ -360,14 +360,4 @@ (provide/cond-contract (struct Rep ([seq exact-nonnegative-integer?] [free-vars (hash/c symbol? variance?)] [free-idxs (hash/c symbol? variance?)] - [stx (or/c #f syntax?)])) - [replace-syntax (Rep? syntax? . -> . Rep?)]) - -(define (replace-field val new-val idx) - (define-values (type skipped) (struct-info val)) - (define maker (struct-type-make-constructor type)) - (define flds (struct->list val)) - (apply maker (list-set flds idx new-val))) - -(define (replace-syntax rep stx) - (replace-field rep stx 3)) + [stx (or/c #f syntax?)]))) diff --git a/collects/typed-racket/typecheck/tc-envops.rkt b/collects/typed-racket/typecheck/tc-envops.rkt index 795b9317bd..107848f6bb 100644 --- a/collects/typed-racket/typecheck/tc-envops.rkt +++ b/collects/typed-racket/typecheck/tc-envops.rkt @@ -13,6 +13,7 @@ env? update-type/lexical env-map env-props replace-props) racket/contract racket/match unstable/struct + unstable/list "tc-metafunctions.rkt" (for-syntax racket/base)) diff --git a/collects/typed-racket/utils/utils.rkt b/collects/typed-racket/utils/utils.rkt index bbbfde39a9..b1c9ed6639 100644 --- a/collects/typed-racket/utils/utils.rkt +++ b/collects/typed-racket/utils/utils.rkt @@ -9,9 +9,6 @@ at least theoretically. racket/require-syntax racket/provide-syntax racket/struct-info "timing.rkt") -;; to move to unstable -(provide list-update list-set) - (provide ;; optimization optimize? @@ -157,16 +154,6 @@ at least theoretically. [(_ hd ([i c] ...) . opts) (define-struct hd (i ...) . opts)]))) -(define (list-update l i f) - (cond [(null? l) (error 'list-update "list not long enough" l i f)] - [(zero? i) (cons (f (car l)) (cdr l))] - [else (cons (car l) (list-update (cdr l) (sub1 i) f))])) - -(define (list-set l k v) - (if (zero? k) - (cons v (cdr l)) - (cons (car l) (list-set (cdr l) (sub1 k) v)))) - (provide make-struct-info-self-ctor) ;Copied from racket/private/define-struct diff --git a/collects/unstable/list.rkt b/collects/unstable/list.rkt index 133d1cf472..e897654799 100644 --- a/collects/unstable/list.rkt +++ b/collects/unstable/list.rkt @@ -182,3 +182,23 @@ (provide/contract [group-by (->* (procedure? list?) (#:key procedure?) list?)]) + +;; endobson added: + +(define (list-update l i f) + (cond + [(zero? i) (cons (f (car l)) (cdr l))] + [else (cons (car l) (list-update (cdr l) (sub1 i) f))])) + +(define (list-set l k v) + (list-update l k (lambda (_) v))) + +(provide/contract + [list-update (->i [(list list?) + (index (list) (and/c (>=/c 0) ( any/c any/c))] + [_ list?])] + [list-set (->i [(list list?) + (index (list) (and/c (>=/c 0) (=/c 0) ( any/c any/c)]) + list?]{ + +Returns a list that is the same as @racket[lst] except at the specified index. +The element at the specified index is @racket[(updater (list-ref lst index))]. + +@examples[#:eval the-eval +(list-update '(zero one two) 1 symbol->string) +] +} + + +@defproc[(list-set [lst list?] + [index (and/c (>=/c 0) (