Zum Forum springen
Benachrichtigungen
Alles löschen

TSCHEME: "Error: op[define] expects 2 arguments" quick help needed!

5 Beiträge
2 Benutzer
0 Reactions
277 Ansichten
msPokerJ
Beigetreten: 21.10.2008
Elite Grinder

Ok wär super wenn mir dabei eben wer helfen könnte, sonst fliegt gleich mein Monitor ausm Fenster...also ich krieg immer den dämlichen Fehler "Error: op[define] expects 2 arguments" und habe keine Ahnung wieso.

(define (replace x y ls)
    .......
    (if (not(nil? (cdr ls))) (replace x y (cdr ls))))

Funktioniert, aber sobald ich bei "....." IRGENDWAS eingebe kommt der Fehler. Selbst wenn ich "(+ 1 1)" eingebe kommts...was zur Hölle läuft da falsch?

Danke schonmal!


Antwort
Zitat
4 Antworten
sarc
Beigetreten: 06.06.2008
PokerStrategist

Steht doch in der Fehlermeldung: Define braucht exakt zwei Argumente. Das erste ist ne Liste aus Funktionsname und Argumenten, das zweite der Rumpf, zu dem die Funktion ausgewertet wird. Es ist in Scheme nicht möglich, eine Reihe von Ausdrücken hintereinander abarbeiten zu lassen (bzw. geht es, aber nur mit nem anderen sehr speziellen Ausdruck), aber einfach zwei Ausdrücke hintereinander, die nacheinander abgearbeitet werden, geht nicht.

Ach ja: Viel Spaß dabei, im Netz Hilfe zu TScheme zu finden... ;)


Antwort
Zitat
msPokerJ Themenstarter
msPokerJ
Beigetreten: 21.10.2008
Elite Grinder

omg....obv versteh ich was die fehlermeldung besagt aber wäre nie darauf gekommen dass es so banal is und ich einfach noch ne klammer dahinter machen muss...ja hilfe zu tscheme gibts nirgends, ist der horror..

danke schonmal. kommen bestimmt nochn paar fragen. samstg klausur und ich hab noch keinen plan ;)


Antwort
Zitat
msPokerJ Themenstarter
msPokerJ
Beigetreten: 21.10.2008
Elite Grinder

ok ich muss nochmal nachhaken. sollte folgendes funktionieren?

(define (f1 x) (
    (befehl1)
    (befehl2)
    ))

Immer wenn ich solche Sachen mache krieg ich den Fehler "list head x is not a procedure", wobei x meist das Ergebnis ist welches ich erwarte. kann ich in tscheme garnicht 2Befehle in einer funktion abarbeiten lassen? wie programmier ich sowas denn dann? o.O


Antwort
Zitat
sarc
Beigetreten: 06.06.2008
PokerStrategist

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.


Antwort
Zitat
Teilen: