Ошибка при помещении переменной в таблицу, разрешены только константы? - PullRequest
0 голосов
/ 08 июня 2010

В настоящее время я работаю над программой Netlogo, в которой мне нужно использовать узлы и ссылки для решения проблемы маршрутизации транспортных средств. (ссылки называются улицами в программе)

Здесь у меня есть некоторые практические проблемы с тем, как ввести переменную скорость соединения в таблицу с другим узлом. С константами вроде 200 и т. Д. Все в порядке. В Интернете я нашел несколько примеров, где используются переменные, но я не знаю, почему я получаю следующую ошибку:

Ожидаемая постоянная.

(или почему netlogo ожидает константу)

Вот соответствующий фрагмент кода:

extensions [table]
streets-own [linkspeed linktoll] 
nodes-own [netw]

;; In another piece of code linkspeed is assigned successfully to the links

to cheapcalc

  ;; start conditions set costs very high 300000

  ;; state 3 unsearched state 2 searching state 1 searched (for later purposes)

  ask nodes [ 

    set i 0 set j count nodes set netw table:make


    while [i < j][


    table:put netw (i) [3000000 3]   set i (i + 1)]]  


  set i 0 let k 0

  ask node 35      ;; here i use node 35 as an example. 

                   ;; node 35 is connected to node 34, 36, 20 and 50

     [table:put netw (35) [0 1]   ;; node need to search costs to travel to itself 

                                   ;; putting constants is ok. 

     while [i < j]

        [ask my-links 

           [ask both-ends 

              [if (who != 35) [set color blue     

;;               set temp ([linkspeed] of street 35 who)    ;; here my real goal is to put this in stat of i. but i is easier than linkspeed. 

                 table:put netw (who) [ i 2 ]

                 ]              

           ]  ]


      set i (i + 1)] ] ;; next node for later, no it is just repetition of the same. 


end

Надеюсь, кто-то знает, что происходит ...

1 Ответ

1 голос
/ 08 июня 2010

Скорее всего, проблема не в том, чтобы поместить переменную в таблицу, а в том, чтобы поместить переменную в список (который вы затем помещаете в таблицу).

Изменить строку ниже:

     table:put netw (who) [ i 2 ]

до:

     table:put netw (who) (list i 2)

Это - (список i 2) - позволяет вам создать список с переменными в нем, вы не можете сделать это иначе - [i 2].

Надеюсь, это поможет.

...