update to the final version of this code
svn: r17658 original commit: d69c96cf06ccc0f6bef7734d679329e9fa320db1
This commit is contained in:
parent
a1062c49f9
commit
aac0a48ef4
|
@ -1,22 +1,25 @@
|
|||
#lang typed/scheme
|
||||
#lang typed-scheme
|
||||
|
||||
(require scheme/bool scheme/list typed/test-engine/scheme-tests)
|
||||
|
||||
(require scheme/list)
|
||||
(define-type-alias Atom (U Number #f))
|
||||
|
||||
(: mrg ([Listof Atom] [Listof Atom] -> [Listof Number]))
|
||||
;; add corresponding numbers, drop false, stop at end of shortest list
|
||||
|
||||
;(check-expect (mrg (list 1 false 2) (list 3 4 5 false 10)) (list 4 4 7))
|
||||
(check-expect (mrg (list 1 false 2) (list 3 4 5 false 10)) (list 4 4 7))
|
||||
|
||||
(define (mrg l k)
|
||||
(cond
|
||||
[(if (empty? l) #t (empty? k))
|
||||
[(or (empty? l) (empty? k))
|
||||
empty]
|
||||
[(and (number? (first l)) (number? (first k)))
|
||||
(cons (+ (first l) (first k)) (mrg (rest l) (rest k)))]
|
||||
[(number? (first l))
|
||||
(cons (first l) (mrg (rest l) (rest k)))]
|
||||
[(and (not (car l)) (not (car k)))
|
||||
(cons 0 (mrg (rest l) (rest k)))]
|
||||
[(not (car l))
|
||||
(cons (car k) (mrg (rest l) (rest k)))]
|
||||
[(not (car k))
|
||||
(cons (car l) (mrg (rest l) (rest k)))]
|
||||
[else
|
||||
(error 'fail)]))
|
||||
(cons (+ (car l) (car k)) (mrg (rest l) (rest k)))]))
|
||||
|
||||
;(test)
|
||||
(test)
|
Loading…
Reference in New Issue
Block a user