2015-08-20 3 views
1

У меня есть список, и я хочу сделать операцию над первыми тремя элементами списка, если они не являются 0.i может выполнять мою операцию над каждым элементом по коду ниже, но не знайте, как это сделать для первых 3 предметов.Как выбрать первые n элементов списка в netlogo

foreach list2 
[ 
if (item ? list2 != 0) 
    [ 
    set candidatelist lput (item ? list3) candidatelist 
] 
] 
+0

Почему отображаются как 'list2', так и' list3'? Должны ли они быть такими же? –

+0

они не совпадают. List2 имеет частоту данных list3 в последовательности. – saeedehrad

ответ

1

я написал ниже код, чтобы решить:

let m 0 
foreach list2 
    [ 
    if (m < 3) 
    [ 
    if (item ? list2 != 0) 
     [ 
     set candidatelist lput (item ? list3) candidatelist 
     ] 
    set m m + 1 
     ] 
    ] 
+0

Я не думаю, что этот код делает то, что вы думаете. По 'item? list2', я думаю, вы имеете в виду 'item m list2' или просто'? '. –

3

Вот помощник для получения первых п элементов:

to-report take [n xs] 
    report sublist xs 0 min list n (length xs) 
end 

Теперь мы можем написать:

filter [? != 0] take 3 ... 

образец пробега:

observer> show filter [? != 0] take 3 [1 0 3 4 5] 
observer: [1 3] 
Смежные вопросы