;Naam : Van Belle Werner
;Groep : C
;Trolnummer : we47091
;----------------------------------------------------------------------
;kzkoesie moi voor het late antwoord maar door de fantastische aandacht
;van mijner twege naar uwer twege tijdens de les heeft deze jongen
;gisteren de foute oplossing gemailed.
;Laten we maar van start gaan : ik heb twee recursieve versies
;geschreven, beide met een verschillende performantie (denk ik toch)
(define (Sum-list l1 l2)
  (cond ((null? l1) l2)
        ((null? l2) l1)
        (else (append (list (+ (car l1) (car l2))) (Sum-list (cdr l1) (cdr l2))))))
;bovenstaande oplossing gaat maar is niet erg efficient omdat ik door het
;gebruik van een append er voor zorg dat bij elke terugkeer uit een recursie
;de ganse lijst opnieuw aan een element wordt gehangen.
;Daarom biedt ik U een verbetering aan :
(define (Sum-list2 l1 l2)
  (cond ((null? l1)
           (if (null? l2)
               '()
               (cons (car l2) (Sum-list2 '() (cdr l2)))))
        ((null? l2)
            (cons (car l1) (Sum-List2 (cdr l1) '())))
        (else (cons (+ (car l1) (car l2)) (Sum-list2 (cdr l1) (cdr l2))))))
;dan nu de gevraagde iteratieve versie
;Hierin gebruik ik ook een 'append' maar hier kan het zoveel kwaad niet
;omdat het element dat ik er aan hang meestal toch maar een element is
;en omdat dit ding toch niet met 'consen' te solven is.
(define (Sum-list3 l1 l2)
  (define (iter result l1 l2)
    (cond ((null? l1) (append result l2))
          ((null? l2) (append result l1))
          (else (iter (append result (list (+ (car l1) (car l2))))
                      (cdr l1)
                      (cdr l2)))))
  (iter '() l1 l2))