(define (ostern j)
(let* ((m (cond((<= 1800 j 1899) 23)
((<= 1900 j 2099) 24)
((<= 2100 j 2199) 24)
(else 'falsches Jahr)))
(n (cond((<= 1800 j 1899) 4)
((<= 1900 j 2099) 5)
((<= 2100 j 2199) 6)
(else 'falsches Jahr)))
(a (remainder j 19))
(b (remainder j 4))
(c (remainder j 7))
(d (remainder (+ (* 19 a) m) 30))
(e (remainder (+ (* 2 b) (* 4 c) (* 6 d) n) 7))
(tag (if (> (+ 22 d e) 31)
(+ d e -9)
(+ 22 d e)))
(monat (if (> (+ 22 d e) 31)
'april
'märz)))
(if (= monat 'april)
(cond((= tag 26) (list 19 monat j))
((and (= tag 25)(= d 28)(= e 6)(>= a 10))(list 18 monat j))))
))
Weiss nicht was Scheme hat, klingt doch alles logisch, oder etwa nicht???
Nur um es mal lesbar zu machen, solltest du das CODE-Tag verwenden. [img]
http://www.fb18.de/gfx/25.gif[/img]
(define (ostern j)
(let* ((m (cond((<= 1800 j 1899) 23)
((<= 1900 j 2099) 24)
((<= 2100 j 2199) 24)
(else 'falsches Jahr)))
(n (cond((<= 1800 j 1899) 4)
((<= 1900 j 2099) 5)
((<= 2100 j 2199) 6)
(else 'falsches Jahr)))
(a (remainder j 19))
(b (remainder j 4))
(c (remainder j 7))
(d (remainder (+ (* 19 a) m) 30))
(e (remainder (+ (* 2 b) (* 4 c) (* 6 d) n) 7))
(tag (if (> (+ 22 d e) 31)
(+ d e -9)
(+ 22 d e)))
(monat (if (> (+ 22 d e) 31)
'april
'märz)))
(if (= monat 'april)
(cond((= tag 26) (list 19 monat j))
((and (= tag 25)(= d 28)(= e 6)(>= a 10))(list 18 monat j))))
))
Weiss nicht was Scheme hat, klingt doch alles logisch, oder etwa nicht???
meckert's denn über syntaxfehler oder liefert einfach keine ergebnisse`?
hmmm hab mich doch bequemt es in scheme auszuführen… bin in der aufgabe bisher nicht so weit gekommen, weil ich im script noch nicht sonderlich weit war ;)
erstmal musst du bei den echos per ' underscores einfügen, also
(else 'falsches_Jahr))))
statt
(else 'falsches Jahr))))
das is unsinn gloob isch:
(= monat 'april)
(ich versteh aber die fehlermeldung von scheme nicht:
if: expected one question expression and two answer expressions, but found 2 expressions in: (if (= monat (quote april)) (cond ((= tag 26) (list 19 monat j)) ((and (= tag 25) (= d 28) (= e 6) (>= a 10)) (list 18 monat j))))
)
[edit] irgendwie zerhauts mir immer die zeilenümbrüche (kann net vernünftige absätze machen), sry
(= monat 'april)
Jupp, das geht nicht. Ich hab gerade kein Scheme installiert, aber Strings solltest du nicht mit = sondern mit (equals? s1 s2) oder (equal? s1 s2) oder so vergleichen. Probier das mal aus. Außeredem werden Strings doch nicht mit 'Hochkomma, sondern mit "Anführungszeichen" geschrieben, oder?
nein das is an sich ein Kommentar oder so… ob man den an sich vergleichen kann - keine Ahnung [img]
http://www.fb18.de/gfx/3.gif[/img]
Kommentare werden mit ; Semikoloon gemacht..
Oops… ich meinte ein "echo" oder wie immer man das in der Fachidioten-Sprache nennt [img]
http://www.fb18.de/gfx/15.gif[/img]
echo passt dann aber immernoch nicht, denn bei einem ungünstig gewählten jahr bricht das programm ab wenn es mit m oder n rechnen soll.
Wie wärs wenn du bei dem cond und dem else einfach mal bei den beiden "else" fällen auch etwas ausgibst und dir das anschaust?
1) (equal? monat 'april) statt (= monat 'april), weil '=' nur auf zahlen anwendbar ist (Script 2b, Seite 84). Das hatten wir zwar noch nicht, aber man kann es umgehen, indem man einfach 3 für März bzw 4 für April verwendet.
2) dein (list ()) wird nur ausgeführt, wenn genau der sonderfall (26. April) eintrifft - sonst nie. darum hattest du sicher keine ausgabe. (Der Sonderfall muss im Jahre 1954 berücksichtigt werden. Siehe Aufgabenzettel. Dann kommts auch zu ner Ausgabe, wenn du das = ersetzt hast.)
Hilfreich wäre es außerdem einen Kommentar an die Stelle zu schreiben, wo der Körper beginnt:
'märz)))
ab hier kann man gut mit cond zu arbeiten
(and (equal? Monat 'April) (= Tag 26)) (list …) ;Sonderfall_1
(and (equal? Monat 'April) (= Tag 25) (= d 28) …usw… (list …) ;Sonderfall_2
(else list …….)
ps admins: Falls es zuviel code-hilfe war, sollte das keine Rolle spielen, weil der Abgabetermin schon war. oder?
hängt von den gruppen ab… ich kann heute noch abgegeben aber sonderlich schwer fand ich den zettel nicht (; und mein code sieht auch etwas anders aus… von daher kann ich net abschreiben (;
ps admins: Falls es zuviel code-hilfe war, sollte das keine Rolle spielen, weil der Abgabetermin schon war. oder?
Da bisher keiner außer mir ein Problem damit gesehen hat, lasse ichs mal stehen [img]
http://www.fb18.de/gfx/22.gif[/img]