FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

scheme - hilfe! :/

scheme - hilfe! :/ 2009-11-06 16:42
Anonymer User
Hey. Scheinbar kann man in Scheme innerhalb einer cond keine define Anweisung anwenden, schon garnicht zwei davon. Wie kann ich aber sonst elegant folgendes umsetzen:

(Java)
int n,k;
if ( j > 5)
{
n = 5;
k= 12;
}
?

Mein Versuch sah folgendermaßen aus:
(define (bla b)
(cond ((> b 5)

(define n 5
(define k 12)))))

Funktioniert aber nicht, weil das define nicht im "toplevel" steht.
Soll ich etwa im ernst vorher alle variablen definen und dann z.B.
(+ n 5) schreiben? Wäre mächtig hässlich.

RE: scheme - hilfe! :/ 2009-11-06 16:49
Fred
Welche Werte sollen n und k denn haben, wenn j <= 5 ist?

RE: scheme - hilfe! :/ 2009-11-06 16:57
Anonymer User
War für meine Frage ja nicht sonderlich wichtig. Von mir aus kann man noch

int n = 0;
int k = 0;

vor die if Anweisung knallen, dann bleiben die bei Werten <=5 eben auf 0.


PS. Beim ersten define fehlt noch eine Klammer, aber das ist nicht das Problem (ist nur beim "ins-Forum-kritzeln" passiert).

RE: scheme - hilfe! :/ 2009-11-06 17:10
Fred
Also brauchst Du n und k nur im true-Teil? Kannst Du dann nicht einfach mit einem let arbeiten?

RE: scheme - hilfe! :/ 2009-11-06 17:20
Anonymer User
Nein, also in der Aufgabe werden die Variablen im false-Fall der ersten Abfrage weiterverarbeitet. Bei dieser konstruierten Situation hier ging es mir nur um das define. Mir will nicht in den Kopf, wie man soetwas in einer Sprache verbieten kann. Da muss es doch ähnliche Möglichkeiten geben die Variablen je nach Bedingung zu belegen.

Konkret geht es hier um die Gauß`sche Osterregel, bei der man je nach Jahreszahl zwei Variablen speziell belegen muss. Je nachdem in welchem Rahmen sich das Jahr bewegt werden diese zwei Variablen unterschiedlich belegt.

RE: scheme - hilfe! :/ 2009-11-06 17:35
Fred
Nein, also in der Aufgabe werden die Variablen im false-Fall der ersten Abfrage weiterverarbeitet.
Schreib doch mal am besten das ganze imperative Programm hier rein, damit man einen besseren Überblick hat.

Da muss es doch ähnliche Möglichkeiten geben die Variablen je nach Bedingung zu belegen.
Eine mögliche Lösung steckt schon in Deinem Satz drin. Statt "Wenn dies belege n so, ansonsten belege n anders" kannst Du ja auch sagen "Belege n folgendermaßen: falls dies so, ansonsten anders".
(define (choose v t f) (if (> v 5) t f)) (define (bla b)         (let ((n (choose b  5 0))               (k (choose b 12 0)))              (* n k b)))

RE: scheme - hilfe! :/ 2009-11-06 19:19
Anonymer User
Hmmm, danke Fred - du hast mich auf einpaar Ideen gebracht. Werde mich später nochmal mit vollständiger beschreibung melden. Aber eine komplette Lösung des Problems sollte hier nicht auftauchen, da wir die Aufgabe abgeben müssen und nicht jeder einfach abschreiben soll.

Cheers.

RE: scheme - hilfe! :/ 2009-11-06 19:25
silentsea
also ich habe das so gelöst, dass ich eine funktion definiert habe, die eine liste mit 2 elementen zurück gibt
so
(define (bla x)    (if (= x 12)        (list 5 12)        (list 6 13)))oder so :D
und dann diese aufgerufen hab in einem let um die beiden zu bestimmen

oh..ich seh grad. im grunde genau das gleiche wie von fred, nur dass es eine liste zurück gibt :D

RE: scheme - hilfe! :/ 2009-11-06 21:42
Anonymer User
Dass define nur im top-level erlaubt ist ist wirklich ganz großer Mist :(.