Допустим, у меня есть модель в Netlogo, и теперь я заинтересован в разработке репортера / процедуры, которая группирует списки в соответствии с их первым элементом.
Для примера, скажем,
globals[list1 list2 list3 listoflists
ordered-list-a
ordered-list-b
]
to setup
set list1 ["a" "b" "c"]
set list2 ["a" "c" "d"]
set list3 ["b" "a" "c"]
set listoflists (list list1 list2 list3)
end
Я хочу создать список списков, чтобы в каждом списке были списки, начинающиеся с одного и того же элемента. Следовательно, желаемый результат равен
[[["a" "b" "c"]["a" "c" "d"]]["b" "a" "c"]]]
т.е. где первый элемент объединяет все списки с a на первом месте, а второй - с теми, которые начинаются с "b".
В идеале это должно быть масштабируемым для большого числа. Я пытался
to create-list
set ordered-list-a []
set ordered-list-b []
(foreach listoflists [[i] ->
if item 0 i = "a" [set ordered-list-a lput i ordered-list-a]
if item 0 i = "b" [set ordered-list-b lput i ordered-list-b]
])
end
, а затем создание списка из a и b, что делает свое дело, но а) это невероятно грязно, б) требует, чтобы я заранее знал длину списка, чего в действительности не знаю (это процедура черепахи) и в) это кажется большим количеством ненужного кодирования.
Существует ли какой-либо способ расширить описанную выше процедуру на любое количество начальных элементов (возможно, внутри цикла while?) И не требует создания списка для каждого начального элемента списка?
Большое спасибо