update to the final version of this code

svn: r17658

original commit: d69c96cf06ccc0f6bef7734d679329e9fa320db1
This commit is contained in:
Sam Tobin-Hochstadt 2010-01-14 22:09:31 +00:00
parent a1062c49f9
commit aac0a48ef4

View File

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