Berechnung von n Vektoren (Scheme / Racket)

ShaleX

Lt. Commander
🎅Rätsel-Elite ’25
Registriert
Mai 2009
Beiträge
1.799
Hallo, ich braeuchte mal ein wenig Hilfe.

Ich moechte eine Summe von beliebig vielen Vekotren berechnen.

Code:
(define vec+
  (lambda () (map + '(1 2 3)
                    '(4 5 6)
                    '(7 8 9))))

Ich hab erstma so angefangen um mir einen Ueberblick zu verschaffen. Das Map dient ja nun dazu alle untereinander liegenden Zahlen (ich hab sie deshalb so angeordnet) zu addieren und wieder in einer Liste auszugeben. Hier wuerde nun
Code:
(vec+)
(12 15 18)
rauskommen.

Jedoch moechte ich das so umschreiben, dass ich in der Eingabe Zeile beliebig viele Vektoren (bzw in dem Fall sind es ja Listen) eintippen kann und er sie immer in diesem Verfahren berechnet. Jedoch hakt es genau hier.

Wenn ich das richtig verstehe braeuchte ich doch Funktionen die sagen wenn du
1 Liste hast, berechne sie gar nicht, wenn du
2 Listen hast berechne sie wie oben, wenn du
3 Listen hast berechne sie wie oben etc fuer n bliebig viele.

Wir krieg ich das am besten hin?

Freue mich ueber Hilfe :)
 
Mein Scheme ist schon ein wenig eingerostet, aber ich würd das einfach über Rekursion machen (viel mehr kann man ja auch nicht in Scheme ;) ), wie du schon beschreiben hast.

Du übergibst ja eine Liste mit Vektoren, daher würd mir als Rekursion einfallen:

Du nimmst das erste Element (den ersten Vektor) aus der Liste
Wenn die Restliste leer ist, dann gibst du das Element zurück.
Wenn in der Restliste noch was drin ist, dann gibst du das Erste Element + Vec(Restliste) zurück. Dabei muss das Plus natürlich die passende Vektoraddition sein.

Fertig
 
Hallo, danke schonmal fuer die Antwort und es hoert sich auch plausibel an, jedoch scheiterts bei mir grad an der Umsetzung. Koenntest du mir eventuell den code zeigen? Ich komm grad um Himmels willen nicht drauf :(
 
Wenn ich mich noch erinnere, dann.

Vektoren müssen alle dieselbe Dimension haben.
Im Prinzip müsste eine Abfrage kommen, wie viele und welche Dimension.
Man könnte ein großes 2D Feld aufspannen , wie M[1..100],[1..100].

Input Dimension ;D
Input Anzahl; Az

Im Quellcode sinngemäß

Eingabe :

FOR i=1 to Az
FOr j=1 to D
Input Feldinhalt
M[i,j]=Feldinhalt
End;
End;


Die Summe wäre ja nur die Summe der Spaltenfeldinhalte Summe M[1..Az,1] , M[1..Az,2] , ..., M[1..Az, D]
 
Cybertronic: Danke für deine Mitteilung, dass du kein Scheme kannst. Hätte der Thread aber auch ohne auskommen können.

€: Lies doch dein SICP. Siehe meine Sig.
 
Tut mir leid, ShaleX, aber dafür ist mein Scheme zu eingerostet, ist schon ein paar Jahre her, dass ich das gelernt/benutzt habe.

Sonst hat asdfman eigentlich DAS Scheme Lehrbuch in der Signatur angegeben, das hat mir damals gut gefallen.

@Cybertronic: Weder For Schleifen noch Arrays sind Grundarten von Scheme, im Prinzip hast du nur Funktionen und Listen und z.B. Schleifen musst du über Rekursion lösen.
 
Weil ich hier eine Hausaufgabe rieche, gebe ich mal nur die Lösung für eine Liste von Zahlen:
Code:
(define num+
  (lambda (x)
    (if (null? x)
        0
        (+ (car x) (num+ (cdr x))))))
Das sollte Hinweis genug sein, um es für eine Liste von Listen umzusetzen.
 
Zuletzt bearbeitet:
Danke schonmal dafuer, aber ist keine Hausaufgabe^^ lediglich eine Uebungsaufgabe
 
Zurück
Oben