0
Итак, я пытаюсь сортировать список по его значению при вычислении с помощью процедуры репортера, которую я создал. Вот код:Сортировка списка по процедуре отчета
globals [ goal Smin Smax distWeight colorWeight ]
turtles-own [ S Ac ]
to setup
ca
set Smin 2
set Smax 6
set distWeight 2
set colorWeight 3
ask n-of n patches [
sprout 1 [
set color one-of [ red blue ]
set heading one-of [ 90 270 ]
set S []
]
]
reset-ticks
end
to go
ask turtles [
foreach sort other turtles [
ask ? [
if Smin < Sim myself ? [
if Sim myself ? < Smax [
set S lput ? S
]
]
]
]
;how do I do this? this does not work
set Ac max-one-of S [Sim myself ?]
]
tick
end
to-report Sim [Ame Ao]
report (Sfcolor Ame Ao * colorWeight) + (Sfdistance Ame Ao * distWeight)
end
to-report Sfcolor [Ame Ao]
ifelse [color] of Ame = [color] of Ao
[ report 1 ]
[ report 0 ]
end
to-report Sfdistance [Ame Ao]
report 1/euclidean-distance [xcor] of Ame [ycor] of Ame [xcor] of Ao [ycor] of Ao
end
to-report euclidean-distance [x y x1 y1]
report sqrt ((x1 - x)^2 + (y1 - y)^2)
end
to-report Gain [ SimVal ]
report (Smax - Smin)/Smax - SimVal
end
Теперь я хочу переменную с именем Ac
содержать черепаху, которая является элементом S, который имеет наибольшее значение Sim. Я пытаюсь сделать это
set Ac max-one-of S [Sim myself ?]
но это не работает.
Gannicus, я думаю, вы получите помощь быстрее, если (а) вы объясните, в каком смысле это не работает, и (б) вы вынимаете все из кода, который не имеет значения для проблемы, и создать «минимальный рабочий пример», который иллюстрирует проблему. Когда вы это сделаете, вы можете сами найти ответ самостоятельно, но если это не поможет людям. Большинство людей не хотят читать много кода, который не имеет отношения к проблеме, которую испытывает другой программист. – Mars