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