2013-06-11 2 views
5

Ich möchte in der Lage sein, dies zu tun. Zum Beispiel ist dies mein Code:Über "cond" in Schema

(cond [true AA] 
      [else BB]) 

In AA möchte ich es 2 Dinge tun. 1 legt den Wert einer globalen Variablen fest und gibt dann eine Zeichenfolge zurück. Wie würde ich das machen?

+1

I 90% der denkt Zeit, die Sie verwenden müssen, beginnen mit 'if' (weitere 5% wären beim Schreiben von Makros). Außerdem bevorzugt Racket "cond" (oder "match") gegenüber "if". Wenn Sie dem folgen, verwenden Sie selten 'begin'. Es ist gut, 'begin' zu verstehen, aber es ist eines dieser Dinge, die Sie früh lernen werden, dass Sie erstaunlich wenig praktischsten Code verwenden werden. (Ähnlich wie Sie Schleifen als rekursive Funktionen zu schreiben, und es ist wichtig zu lernen, und manchmal werden Sie wirklich, dass _Text_, aber meistens werden Sie tatsächlich Dinge wie 'map' oder' for/list' verwenden.) –

Antwort

9

In cond besonderen Form, gibt es eine implizites begin nach jedem Zustand, also ist es in Ordnung, mehrere Ausdrücke zu schreiben, nicht vergessen, dass nur der Wert der letzten zurückgegeben. Wie folgt aus:

(cond [<first condition> 
     (set! global-variable value) 
     "string to return"] 
     [else 
     "other return value"]) 
+1

THank Dich sehr. Genau das suche ich :) – nonion

0

Dergleichen kann leicht in der Scheme R5RS Spezifikation gefunden werden. Es ist wirklich eine Lektüre wert, da es eine der feinsten Sprachspezifikationen ist, die je geschrieben wurde!

Andere syntaktische Schlüsselwörter, die Sie nützlich finden könnten:

(if <predicate> <consequent> <alternate>) 
(begin <expression-or-declaration> ... <expression>) 
(case <expression> <case-clause> ...) 
(and <test> ...) 
... others ... 
0

eine Hilfsfunktion erstellen, die zwei Dinge tun. haben Ihre if-Anweisung Aufruf der Funktion bei Bedarf:

(cond [(test? something) (your-function your-data)] 
     [else (another-function your-data)]) 

Eine weniger einfache Weise zwei Funktionen und „link“, sie mit einem „und“ zu nennen sei:

(cond [(test? something) 
     (and (do-this data) (do-that data))] 
     [else (do-something-else data)]) 
+0

und was passiert, wenn '(do-this data)' '' f' zurückgibt? –