Nein, so was sollte nicht funktionieren. In TScheme (und in funktionalen Programmiersprachen allgemein) funktioniert so was nicht. TScheme kann zwar relativ viel, aber diese Sprachfeatures werden in der Klausur dann nicht so gern gesehen... Deswegen verrat ich dir auch gar nicht erst, wie das gehen würde.
Funktionale Programmierung funktioniert eher so, dass du mehrere Funktionen hintereinander ausführst und das Ergebnis der einen dann als Eingabe für die nächste gilt. Wenn du beispielsweise imperativ so was machen willst:
x = befehl1(x);
return befehl2(x);
dann geht das in TScheme: (befehl2 (befehl1 x))
Einfach so mehrere Befehle hintereinander geht nicht. Funktionale Programmierung erfordert da ne völlig andere Denkweise.
Um dir die Fehlermeldung zu erklären: Auch so was wie ((befehl1) (befehl2)) kann erst mal ausgewertet werden, allerdings muss dann (befehl1) eine Funktion liefern, die dann auf das Ergebnis von (befehl2) angewandt wird. Du kannst da beispielsweise den Absolutbetrag auf diese Weise programmieren:
(define (abs x)
((if (> x 0) + -) x))
(plusminus die ein oder andere Klammer... ;)) Da wird dann das erste Ding zu ner Funktion ausgewertet (genauer gesagt zu nem Operator, aber das ist für das Beispiel egal...), nämlich + oder -, und das dann direkt auf x angewandt. Das ist etwas, das du mit Java beispielsweise in der Form nicht hinkriegst.
danke schonmal. kommen bestimmt nochn paar fragen. samstg klausur und ich hab noch keinen plan
Das ist schlecht...
Add mich mal in der Community, wenn du magst, ich denk ich kenn mich mit TScheme halbwegs vernünftig aus...
Du kannst versuchen, Hilfe zu Scheme zu finden, allerdings verhalten sich einige elementare TScheme-Funktionen deutlich anders als das normale Scheme (wobei das normale Scheme eigentlich sehr viel größer und komplexer ist). Aber zumindest für die Denkweise hilft das.