Hilfe rekursive Funktion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hilfe rekursive Funktion

    Hi alle,

    Ja ich sags gleich es handelt sich um eine "Hausaufgabe" deswegen suche ich nicht eine Loseung sondern nur einen Denkanstoss in die richtige richtung meine Kollegen und ich hanegen seit ner Woche an dem Problem und kriegens net hin :-(.

    Wir sollen eine schem efunktion schreiben

    funktion(l) (l ist eine Liste)

    die sich folgendermassen benimmt

    funktion ’(a b c d e)) ergibt (b c d e a)
    funktion ’(e a b c d)) ergibt (a b c d e)

    Das ganze soll nur eine funktion verwenden und sollte rekursiv erfolgen
    um das ganze noch etwas netter zu machen duerfen wir "append" und "last" nicht verwenden

    Ich habe schon jede Menge versucht aber ich weis nicht wie ichs shcaffe dass, das erste element nur einmal an das ende gebracht wird. Ich nehme an das ist wohl einer der base cases. Aber ich komm einfach net drauf wie ichs machen soll. Meine funktion dreht irgendwie das ganze immer nur um :(

    Meine idee im moment ist das gazne einfach immer eins nach links zu schieben

    also im prinzip cons( ([letztes element] liste)
    Nur weis ich grar nicht wie ich an dieses Element rankommen soll bzw wie ich die liste manipulieren kann


    Ich sag nochmal ich suche hier keine Loesung sondern nur einen Denkanstoss in die richtige Richtung.

    Im moment sieht mein code so aus

    [code:1]
    (define x (list 'a 'b 'c))

    (define funktion
    (lambda (l)
    (cond ((null? l) (l))
    ((null? (cdr l)) (car l))
    (else (cons (funktion (cdr l)) l)))))
    [/code:1]

    Bin fuer saemtliche Hinweise dankbar :)
  • Hallo,

    also ich würde es auf zwei Funktionen aufteilen:

    [code:1]; Deine Funktion
    first_to_last(liste):
    liste=() -> ()
    liste=(e . l) -> set_last(l, e)

    ; Fügt ein Element an das Ende einer Liste an
    set_last(liste, elem):
    liste=() -> (elem . ())
    liste=(e . l) -> (e . set_last(l, elem))[/code:1]
    Mit dem Ansatz sollte es nicht so schwierig sein. :wink:


    Viele Grüße,

    Siracusa