2015-04-23 4 views
1

У меня есть эта строка кода:NetLogo - ожидаемая постоянная ошибка

set SSB sum [foreach [foglie with [ipotetico? = false]] [((([media] of self) - media-tot)^2) * ([larg] of self * [altez] of self)]] 
  • Foglie являются agentlist;
  • медиа-карапуз является глобальной переменной

Я не могу понять, почему он дает мне ошибку:

expected constant

я нашел следующее лазейку, но он смотрит на меня не элегантный и, возможно, еще медленнее:

set SSB 0 
ask foglie with [ipotetico? = false] [ set SSB (SSB + (([media] of self - media-tot)^2) * ([larg] of self * [altez] of self)) ] 
  • Что вы думаете?
  • Как я могу заставить первый код работать?
  • Второй эквивалент кода?
+2

'[...] of self' не добавляет никакого значения и всегда может быть опущен. вместо '[x] of self', просто напишите' x' –

ответ

3

Хороший вопрос будет включать минимальный пример проблемы. В этом случае, в первой попытке выше, похоже, что вы не понимаете разницу между агентами и списками, а также использование foreach. Поэтому вам нужно прочитать об этом.

  • sum требует список в качестве входных данных
  • , чтобы сделать список с кронштейном нотации, вам необходимо включить только константы; в противном случае используйте list
  • положить agentset в скобках не создает список, по указанной выше причине, но даже если вы использовали list вы получите список, содержащий agentset как элемент, а не список агентов
  • foreach не возвращает список (но map делает)

Предполагая media, larg и altez являются Foglie атрибуты и media-tot является глобальным, вы могли бы сделать следующее:

sum [(media - media-tot)^2 * (larg * altez)] of (foglie with [ipotetico? = false]) 
+0

Спасибо за хороший ответ. Приносим извинения за отсутствие минимального примера, но требования изменились, и я должен показать модель завтра. – AndreA

Смежные вопросы