2015-05-04 18 views
5

Desidero - if elseif else istruzione in NetLogo. Come posso farlo in modo efficiente? Ho controllato la documentazione di NetLogo senza alcun comando per farlo. Previous similar question non ha risposto direttamente ma risolto nel contesto.if else else implementazione in ambiente Netlogo

Una soluzione semplice è:

let flag true 
    if(condition1) 
    [ 
    ... 
    set flag false 
    ] 
    if(flag and condition2) ;else if statement 
    [ 
    ... 
    set flag false 
    ] 
    if(flag) ;else statement 
    [ 

    ... 
    ] 

Sto cercando per gli altri quelli più efficienti.

Modifica: bandiera aggiunta nel secondo se condizione su suggerimento di Nicolas.

+2

Il codice proposto non è proprio come un 'if' /' elseif'/'else': cosa succede se' condition1' e 'condition2' sono entrambi' true'? Dovresti cambiare il tuo secondo 'se' a' if (flag e condition2) '. Ma questo diventa molto caotico. Finché non sarà disponibile una soluzione migliore (che potrebbe essere prima di quanto pensassi ...) consiglierei di attenersi al modello descritto da Seth in http://stackoverflow.com/a/20332555/487946. –

+0

Sì, non so come mi sono perso. Immagino che l'approccio di Seth sia solo una soluzione. Ma rende il tutto meno leggibile, soprattutto quando i blocchi includono più codice. –

+0

Siamo consapevoli che dovrebbe esserci un modo migliore. Vedi https://github.com/NetLogo/NetLogo/issues/344 –

risposta

4

L'unico modo che posso raccomandare con tutto il cuore è:

ifelse condition1 
    [ ... ] 
    [ ifelse condition2 
     [ ... ] 
     [ ifelse condition3 
     [ ... ] 
     [ ifelse ... 

Ma sì, il rientro e la leggibilità non sono grandi. Per suggerimenti su eventuali miglioramenti, vedere https://github.com/NetLogo/NetLogo/issues/344 e https://github.com/qiemem/ControlFlowExtension.

+0

Grazie! Questa estensione funziona anche per Windows? Anche se può sembrare una domanda banale, puoi per favore chiarire come usarlo. L'ho incollato nella "cartella delle estensioni nella stessa posizione dell'applicazione NetLogo". E poi l'ha importato nel modello usando le estensioni [ControlFlowExtension-master]. Ma non sembra funzionare. –

+0

Si prega di aprire una nuova domanda. –

+0

E non dire mai "non funziona", dire sempre esattamente cosa succede invece, incluso il testo completo ed esatto di qualsiasi messaggio di errore. –

-1

Trovo che questo modulo il più leggibile, anche se la pila di "]" alla fine è un po 'scoraggiante

ifelse item cur brain = 0 [sit][ 
ifelse item cur brain = 1 [eat][ 
ifelse item cur brain = 2 [steal][ 
ifelse item cur brain = 3 [birth][ 
ifelse item cur brain = 4 [hunger][ 
ifelse item cur brain = 5 [smell][ 
]]]]]] 

ha il vantaggio di essere concisi e la lettura come uno stile "C" switch statement