[icfp] allow recursive define (need to do same for lets)
This commit is contained in:
parent
9f2e0a92d2
commit
04277f504c
|
@ -122,7 +122,7 @@
|
|||
;; Gets a slice of the label on the half-open interval [i, j)
|
||||
(: sublabel (case-> (-> label Index label)
|
||||
(-> label Index Index label)))
|
||||
(define-values (sublabel)
|
||||
(define sublabel
|
||||
(case-lambda
|
||||
((label i)
|
||||
(sublabel label i (label-length label)))
|
||||
|
@ -137,7 +137,7 @@
|
|||
;; destructively sets the input label to sublabel.
|
||||
(: sublabel! (case-> (-> label Index Void)
|
||||
(-> label Index Index Void)))
|
||||
(define-values (sublabel!)
|
||||
(define sublabel!
|
||||
(case-lambda
|
||||
((label i)
|
||||
(sublabel! label i (label-length label)))
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
(: ds* In-Indexes)
|
||||
(define ds* (vector n-samples))
|
||||
(: ds Indexes)
|
||||
(define-values (ds)
|
||||
(define ds
|
||||
(check-array-shape ds*
|
||||
(λ () (raise-argument-error 'name "Indexes" ds))))
|
||||
(: vs (Vectorof Flonum))
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
syntax/parse
|
||||
syntax/id-table
|
||||
(for-template
|
||||
(prefix-in tr: (only-in typed/racket/base define let let-syntax quote set!))
|
||||
(prefix-in tr: typed/racket/base)
|
||||
(prefix-in r: (only-in racket/base quote))))
|
||||
|
||||
;; =============================================================================
|
||||
|
@ -90,9 +90,9 @@
|
|||
[else (parser stx)]))))
|
||||
(define f-define
|
||||
(lambda (stx)
|
||||
(syntax-parse stx
|
||||
(syntax-parse stx #:literals (tr:#%plain-lambda)
|
||||
[(_ name:id v)
|
||||
#:with v+ (expand-expr (syntax/loc stx v))
|
||||
#:with (tr:#%plain-lambda (_) v+) (expand-expr (syntax/loc stx (tr:lambda (name) v)))
|
||||
#:when (syntax-e (syntax/loc stx v+))
|
||||
#:with m (f-parse (syntax/loc stx v+))
|
||||
#:when (syntax-e (syntax/loc stx m))
|
||||
|
|
Loading…
Reference in New Issue
Block a user