2013-06-11 15 views
5

Voglio essere in grado di farlo. Ad esempio, questo è il mio codice:Informazioni su "cond" nello schema

(cond [true AA] 
      [else BB]) 

In AA, voglio che faccia 2 cose. 1 è di impostare il valore di una variabile globale e quindi restituisce una stringa. Come potrei fare per farlo?

+1

penso il 90% del tempo è necessario usare 'begin', è con' if' (un altro 5% sarebbe quando si scrivono macro). Inoltre, Racket favorisce 'cond' (o' match') su 'if', quindi se segui raramente userai' begin'. È bello capire 'begin', ma è una di quelle cose che imparerai presto che utilizzerai sorprendentemente poco nella maggior parte dei codici pratici. (Proprio come impari a scrivere loop come funzioni ricorsive, ed è importante imparare questo, e a volte lo hai veramente _need_, ma per lo più userai effettivamente cose come 'map' o' for/list'.) –

risposta

9

Nel modulo speciale cond, c'è un begin implicito dopo ogni condizione, quindi è corretto scrivere diverse espressioni, ricordando che verrà restituito solo il valore dell'ultimo. Come questo:

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

THank tu molto. Questo è esattamente quello che sto cercando :) – nonion

0

Questo genere di cose possono essere facilmente trovati nella specifica Scheme R5RS. Vale davvero la pena leggerlo in quanto è una delle migliori specifiche linguistiche mai scritte!

altre parole chiave sintattiche che potreste trovare d'uso:

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

creare una funzione di supporto che fa 2 cose. avere il vostro se chiamata dichiarazione ha detto funzione quando appropriato:

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

Un modo meno semplice sarebbe quella di chiamare due funzioni e "link" loro con una "e":

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

e cosa succede se '(do-this data)' restituisce '# f'? –

Problemi correlati