Fragen über Fragen... noch mehr Scheme

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Fragen über Fragen… noch mehr Scheme
Klausur 2002-03, Aufgabe 2…
a) sollte ja noch gehen, also ich würd da halt einfach nix auswerten sondern den ganzen Ausdruck als Liste nehmen und hinmalen.

Aber b) is ganz mysteriös… was soll denn bitteschön ein “rechts-seitiges cons” sein? Und was muss man denen ihrer Meinung nach dann tun? Und was is daran ineffizient? Ich dachte Scheme ist generell erstmal ineffizient…

Naja, vielleicht hat’s ja eine(r) verstanden?

BTW, sind in der Algo-Klausur eigentlich auch C-style-Lösungen zulässig? Ich hab heute die 2001-03/3b (mit den Paaren) gemacht… naja, schaut nicht sehr nach Scheme aus mit der do-Schleife und den set!'s drinnen :wink:


Ich bin mir nicht sicher, aber da könnte gemeint sein, dass dieses right-cons, das Element el nicht wie bei cons üblich an die ganz linke Stelle setzt, sondern an die ganz rechte.
Also z.B.

Normales cons macht:
(cons 'h '(a l l o)) => (h a l l o)

Bei right-cons sollte dann wohl folgendes rauskommen:
(right-cons 'h '(a l l o)) => (a l l o h)

Ineffizient ist das wohl wegen dem reverse, das da drinsteckt.

Die Geschichte mit den Paaren habe ich folgendermaßen gelöst:

(define (paare lst)
  (cond ((null? lst) '())
        ((null? (cdr lst)) (list (list (car lst))))
        (else (cons (cons (car lst) (getlast lst)) (paare (cdr (killlast lst)))))))

(define (getlast lst)
  (cond ((null? lst) '())
        ((null? (cdr lst)) (car lst))
        (else (getlast (cdr lst)))))

(define (killlast lst)
  (cond ((null? lst) '())
        ((null? (cdr lst)) '())
        (else (cons (car lst) (killlast (cdr lst))))))

Was kürzeres ist mir nicht eingefallen.

Gruß
Void


[URL]http://board.fau-informatik-2001.de/showthread.php?s=04189e2cc2d35525bdf42e77f6eac0a9&threadid=1109[/URL]