netlogo: вложенный ifelse не может получить доступ к последней команде ifelse

У меня есть три уровня команды ifelse. Я пытаюсь заставить агента что-то сделать, сравнивая 2 переменные разных агентов. Краткое описание команды ifelse.

Процедуры 1 и 2 пытаются сравнить переменные двух разных агентов в одном и том же патче и что-то сделать; еще

Процедура 3 пытается сравнить переменные двух агентов на разных участках в радиусе 2, затем сделать что-то; остальное.

Проблема: Когда я запускаю процедуры 1 и 3 (отключить процедуру 2) ИЛИ процедуры 2 и 3 (отключить процедуру 1), код в порядке. Но когда я попытался выполнить всю процедуру, он не смог получить доступ к команде [сделать что-то] в процедуре 3.

Мой код выглядит так;

to cocreate-value1
  ask capabilities-here
    [ let this-resource one-of resource
     ask one-of prevalues-here  
      [ ifelse value = this-resource
             [ use-resource ]
             [ cocreate-value2]
      ] ]
end

to cocreate-value2
  ask capabilities-here
  [ let this-knowledge one-of knowledge 
    ask one-of prevalues-here   
    [ ifelse value = this-knowledge
      [use-knowledge ]
      [cocreate-value3]
    ] ]
end

to cocreate-value3
   ask one-of other capabilities in-radius 2 
       [let resource2 sentence (resource) (knowledge)
        let this-resource2 one-of resource2
        let new-cap capabilities with [one-of resource = this-resource2] 
        ask prevalues-here 
            [ ifelse value = this-resource2
                [ask capabilities-here
                  [if any? other new-cap in-radius 2 
                     [ create-link-to one-of other new-cap in-radius 2
                       set color white]] ;; this code is not executed
                       use-network ] ;; this one too
                      [set color yellow ]
 ]]
end

Кто-нибудь может найти проблему? Спасибо за помощь

1 ответ

Это разоблачает проблему?

to cocreate-value1
  ask capabilities-here [
    let _resource one-of resource
    let _pv one-of prevalues-here
    if (_pv != nobody) [
      ask _pv [
        ifelse (value = _resource) [
          use-resource
        ] [
          cocreate-value2
        ]
      ]
    ]
  ]
end

to cocreate-value2
  print "enter cv3"
  ask capabilities-here [
    let _knowledge one-of knowledge 
    let _pv one-of prevalues-here
    if (_pv != nobody) [
      ask _pv  [
        ifelse (value = _knowledge) [use-knowledge ] [cocreate-value3]
      ]
    ]
  ]
  print "exit cv3"
end

to cocreate-value3
  print "enter cv3"
  let _oc one-of other capabilities in-radius 2
  ifelse (_oc = nobody) [
    print "no other capabilities"
  ] [
    ask _oc [
      let _resource2 one-of (sentence resource knowledge)
      let _resource one-of resource
      let _new-cap capabilities with [_resource = _resource2] 
      if (not any? prevalues-here) [error "no prevalues here!"]
      ask prevalues-here [
        ifelse (value = _resource2) [
          ask capabilities-here [
            let _other one-of other _new-cap in-radius 2
            if (_other != nobody) [
              print "found a link partner!"
              create-link-to _other
              set color white
            ]
          ] ;; this code is not executed
          use-network
        ] [;; this one too
          set color yellow
        ]
      ]
    ]
  ]
  print "leave cv3"
end
Другие вопросы по тегам