WIP.
This commit is contained in:
parent
392999de86
commit
e44d527f2b
|
@ -263,14 +263,35 @@ functions is undefined.
|
||||||
@subsection{Tests}
|
@subsection{Tests}
|
||||||
|
|
||||||
@CHUNK[<test-fold-instance>
|
@CHUNK[<test-fold-instance>
|
||||||
(make-fold test-fold
|
(make-fold test-fold-1
|
||||||
(List String Number (List String String Symbol String))
|
(List String Number (List String String Symbol String))
|
||||||
Number
|
Number
|
||||||
[String Number (λ ([x : String] [acc : Number])
|
[String Number (λ ([x : String] [acc : Number])
|
||||||
(values (+ (string-length x) acc)
|
(values (+ (string-length x) acc)
|
||||||
(+ acc 1)))])
|
(+ acc 1)))])
|
||||||
|
|
||||||
(test-fold '("a" 7 ("b" "c" x "d")) 0)]
|
(test-fold-1 '("a" 7 ("b" "c" x "d")) 0)]
|
||||||
|
|
||||||
|
@CHUNK[<test-fold-instance>
|
||||||
|
(make-fold test-fold-2
|
||||||
|
(List String Number (Pairof String String) Symbol)
|
||||||
|
Number
|
||||||
|
[String Number (λ ([x : String] [acc : Number])
|
||||||
|
(values (+ (string-length x) acc)
|
||||||
|
(+ acc 1)))])
|
||||||
|
|
||||||
|
(test-fold-2 '("a" 7 ("b" . "c") x) 0)]
|
||||||
|
|
||||||
|
@CHUNK[<test-fold-instance>
|
||||||
|
(make-fold test-fold-listof
|
||||||
|
(List String Number (Listof String) Symbol String)
|
||||||
|
Number
|
||||||
|
[String Number (λ ([x : String] [acc : Number])
|
||||||
|
(values (+ (string-length x) acc)
|
||||||
|
(+ acc 1)))])
|
||||||
|
|
||||||
|
(test-fold-listof '("a" 7 ("b" "c" "d") x "e") 0)]
|
||||||
|
|
||||||
|
|
||||||
@CHUNK[<test-make-fold>
|
@CHUNK[<test-make-fold>
|
||||||
(define-syntax (make-fold stx)
|
(define-syntax (make-fold stx)
|
||||||
|
@ -320,6 +341,30 @@ functions is undefined.
|
||||||
[(tmp2 new-acc) (rec tmp1 new-acc1)]
|
[(tmp2 new-acc) (rec tmp1 new-acc1)]
|
||||||
...)
|
...)
|
||||||
(values (list tmp2 ...) new-acc-last)))]
|
(values (list tmp2 ...) new-acc-last)))]
|
||||||
|
[((~literal Pairof) a b)
|
||||||
|
;(define/with-syntax (tmp-a tmp-b) (generate-temporaries #'(a b)))
|
||||||
|
;(define/with-syntax (acc-a acc-b) (generate-temporaries #'(a b)))
|
||||||
|
(define/with-syntax rec-a (recursive-replace #'a))
|
||||||
|
(define/with-syntax rec-b (recursive-replace #'b))
|
||||||
|
#`(λ ([val : (Pairof a b)] [acc : acc-type])
|
||||||
|
(let*-values ([(tmp-a acc-a) (rec-a (car val) acc)]
|
||||||
|
[(tmp-b acc-b) (rec-b (cdr val) acc-a)])
|
||||||
|
(values (cons tmp-a tmp-b) acc-b)))]
|
||||||
|
[((~literal Listof) a)
|
||||||
|
;(define/with-syntax (x) (generate-temporaries #'(x)))
|
||||||
|
;(define/with-syntax (acc1) (generate-temporaries #'(acc)))
|
||||||
|
(define/with-syntax rec (recursive-replace #'a))
|
||||||
|
(define/with-syntax new-a-type
|
||||||
|
(replace-in-type #'a #'([from to] ...)))
|
||||||
|
#`(λ ([val : (Listof a)] [acc : acc-type])
|
||||||
|
(let ([f (foldl
|
||||||
|
(λ ([x : a]
|
||||||
|
[acc1 : (Pairof (Listof new-a-type) acc-type)])
|
||||||
|
(let-values ([(res res-acc) (rec x (cdr acc1))])
|
||||||
|
(cons (cons res (car acc1)) res-acc)))
|
||||||
|
(cons '() acc)
|
||||||
|
val)])
|
||||||
|
(values (reverse (car f)) (cdr f))))]
|
||||||
[x:id
|
[x:id
|
||||||
#'values]))]
|
#'values]))]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user