FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Endrekursion

Endrekursion 2003-03-31 14:05
Anonymer User
hallo leuds!
Also ich hab eine Funktion linear definiert:

(verdoppeln '(1 2 3 4)) -> (1 1 2 2 3 3 4 4)

(define (verdoppeln xs)
(if (null? xs) '()
(append (list (car xs) (car xs))
(verdoppeln (cdr xs)))))

So und nu möchte ich es endrekursiv schreiben.

Ist dann doch

(define (verdoppeln xs)(verdoppeln_acc xs '()))

(define (verdoppeln_acc xs acc)
(if (null? xs) acc

(append (list (car xs) (car xs))

(verdoppeln_acc (cdr sx)))))

Also da fehlt noch was
help

Re: Endrekursion 2003-03-31 14:12
MoKrates
(define (verdoppeln xs)(verdoppeln_acc xs '())) (define (verdoppeln_acc xs acc) (if (null? xs) acc (verdoppeln_acc (cdr xs) (append (list (car xs) (car xs))))))
So sollte es heissen.

wow, mit tags kann man es sogar lesen :) MoKrates

Re: Endrekursion 2003-03-31 14:23
Anonymer User
danke! war ja fast richtig

Re: Endrekursion 2003-03-31 19:44
Anonymer User
so jetzt gehts, allerdings ohne dein schönes append.


(define (verdoppeln xs) (verdop (reverse xs) '()))
(define (verdop xs acc)
(if (null? xs) acc
(verdop (cdr xs) (cons (car xs) (cons (car xs) acc)))))