Val, вот некоторый рабочий код, который создает новый элемент и обновляет мой личный список.
Возможно, это не совсем то, что вы хотели, но я надеюсь, что в любом случае это поможет. Вы не включили всю информацию о породах и о том, кому принадлежит, что я наказал.
Я разбил более сложные команды на несколько более коротких, чтобы отладить то, что происходило и где оно ломалось. Я добавил несколько операторов печати.
Если вы загрузите это, запустите программу установки и нажмете «go» один раз, вы увидите агентов в сети, связанных с их номерами «кто», кроме них, чтобы вы могли легко проверитьте, которые вы хотите. Значения my-list также выводятся в разделе команд.
Еще две итерации шага "go" должны убедиться, что они выводят то, что вы хотели.
Я не знал, хотите ли вы, чтобы new_elem был просто локальным для раздела create_elements, или если вы хотели, чтобы он был доступен глобально, поэтому я размещаю комментарии в обоих местах.
Надеюсь, это поможет! Есть больше комментариев в самом коде. Обратите особое внимание на то, что вы должны инициализировать my-list как пустой список, или он по умолчанию будет равным нулю, и ваша инструкция fput завершится ошибкой с комментарием об ожидании списка и поискеноль.
globals [
;;new_elem ;; might be needed as a global ??
]
;; ///////////////////// note that there is no breed required called "people"
breed [ elements element]
breed [ breed1 lion ]
breed [ breed2 tiger ]
;; ///////////////////// i punted on which entity owned "function1 and function2
breed1-own [ attribute function1 function2 my-list]
breed2-own [ attribute function1 function2 my-list]
to setup
clear-all
;; make some turtles with breed = breed1 (say, red lions)
create-breed1 2 [ set size 2 set shape "circle" set color red
setxy random-xcor random-ycor
]
;; make some turtles with breed = breed2 (say, green tigers)
create-breed2 2 [ set size 2 set shape "circle" set color green
setxy random-xcor random-ycor
]
;; //////////////////////////////////////////////////////////////////////////
;; NOTE!!! If you don't initialize my-list to an empty LIST type,
;; fput will generate an error when you try to fput a new element onto it
;; this is ugly but fast:
ask breed1 [create-links-with other breed1
set my-list [] ]
ask breed1 [create-links-with breed2
set my-list [] ]
ask breed2 [create-links-with other breed2
set my-list [] ]
ask breed2 [create-links-with breed1
set my-list [] ]
ask turtles [set label who] ;; ///////////////////////// for debugging
;; set new_elem nobody ;; this could be a global so it can persist
;; outside create_element, in which case
;; initilize it here
reset-ticks
end
to go
create_elements
tick
end
to create_elements
;; declare the local variables, all agent-sets of some type
let new_elem nobody ;; declare this locally if we don't need to persist it
;; outside the create_elements context
;; and remove the declaration in [ globals ]
;; and initializtion in setup
let personx nobody
let xx-neighbors nobody
;; do just this creation here in order to see what's going on more easily
;; than combining multiple operations into a long complex command
create-elements 1 [ set new_elem self ]
type "new element is this agentset " show new_elem
set personx one-of turtles with [breed = breed1 or breed = breed2]
ifelse [breed = breed1] of personx
[ ;; if it is breed1
ask personx [
set attribute random-float 1
set function1 (1 + attribute)
]
]
[ ;; else, it must be breed2
ask personx [
set attribute random-float 1
set function2 (1 - attribute)
]
]
;;//////////////////////////////////////// for debugging
type "the personx we defined above is " print personx
ask personx [set xx-neighbors (turtle-set self in-link-neighbors )]
if-else xx-neighbors != nobody ;; If it has any members, which should
;; always be true since we added self to the set
[
ask xx-neighbors
[
set my-list fput new_elem my-list
;; ////////////////////////////////////for debugging
type "here's the resulting my-list: " show my-list
]
]
[ print "ERROR didn't find any neighbors or self" ]
end