2015-05-04 5 views
5

Dilek - NetLogo'da if elseif else bildirimi. Nasıl bu kadar verimli yapabilirim? NetLogo belgelerini kontrol etmek için hiçbir komut kontrol etmedim. Previous similar question doğrudan yanıtlamadı ancak bağlamda çözüldü.Netlogo ortamında başka bir uygulama gerçekleştirirse

Basit bir çözümdür: başkalarına daha verimli olanları arıyorum

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

    ... 
    ] 

.

Düzenleme: Nicolas'ın önerisi üzerine koşulsa ikinci bayrağı ekledi. Ben bütün kalbiyle tavsiye edebilir

+2

Önerilen kodunuz gerçekten bir "if"/"elseif"/'else' gibi değil:" condition1 "ve" condition2 "her ikisi de" true "ise? Eğer ikincisini 'if' olarak değiştirirseniz (bayrak ve koşul2) 'yi değiştirmeniz gerekir. Ama bu hızlı bir şekilde karmaşıklaşır. Daha iyi bir çözüm elde edilinceye kadar (ki düşündüğünüzden daha erken olabilir). Seth'in http://stackoverflow.com/a/20332555/487946 adresinde tarif ettiği desene yapışmasını tavsiye ederim. –

+0

Evet, bunu nasıl özledim bilmiyorum. Sanırım Seth'in yaklaşımı sadece çözüm. Ancak özellikle bloklar daha fazla kod içerdiğinde genel olarak biraz daha okunabilir hale geliyor. –

+0

Daha iyi bir yol olması gerektiğinin farkındayız. Bkz. Https://github.com/NetLogo/NetLogo/issues/344 –

cevap

4

tek yoludur:

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

Ama evet, girinti ve okunabilirliği büyük değildir. Olası iyileştirmelerle ilgili düşünceler için, bkz. https://github.com/NetLogo/NetLogo/issues/344 ve https://github.com/qiemem/ControlFlowExtension.

+0

Teşekkürler! Bu uzantı pencereler için de çalışıyor mu? Her ne kadar önemsiz bir soru gibi görünse de, onu nasıl kullanacağınızı açıklayabilir misiniz? "NetLogo uygulamasıyla aynı konumda bulunan uzantıları klasörüne yapıştırdım." Ve sonra modeli [ControlFlowExtension-master] uzantıları kullanarak modele aktardı. Ama işe yaramıyor. –

+0

Lütfen yeni bir soru açın. –

+0

Ve asla "işe yaramıyor" demeyin, herhangi bir hata mesajının tam ve tam metni dahil olmak üzere her zaman tam olarak ne olduğunu söyleyin. –

-1

Sonunda "]" istifi ne kadar en okunabilir bu formu bulmak biraz daha kısa olması ve bir "C" tarzı gibi okuma avantajına sahiptir yıldırıcı

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][ 
]]]]]] 

anahtarını değiştir