2013-06-12 3 views
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 ?] 

но это не работает.

+2

Gannicus, я думаю, вы получите помощь быстрее, если (а) вы объясните, в каком смысле это не работает, и (б) вы вынимаете все из кода, который не имеет значения для проблемы, и создать «минимальный рабочий пример», который иллюстрирует проблему. Когда вы это сделаете, вы можете сами найти ответ самостоятельно, но если это не поможет людям. Большинство людей не хотят читать много кода, который не имеет отношения к проблеме, которую испытывает другой программист. – Mars

ответ

1

Это поможет, если вы точно скажете, почему это не сработало.

Но для начала эта инструкция находится вне цикла foreach, так? ничего не значит.