Netlogo: Как мне сгладить список списков списков? - PullRequest
0 голосов
/ 21 марта 2019

Я могу сделать следующее:

> set one-deep [[3] [3] [1] [3] [2]]
> reduce sentence one-deep
: [3 3 1 3 2]

Но как мне сгладить более глубокие списки списков ... списков?

> set two-deep [[1] [3] [1] [2] [[1] [1] [2] [3] [3]] ]
  ???
: [1 3 1 2 1 1 2 3 3]

1 Ответ

4 голосов
/ 21 марта 2019

Если вы уверены, что в вашем списке списков всего два углубления, вы можете просто сделать:

reduce sentence reduce sentence two-deep

Но если вы хотите более общее решение, то что-то вроде этого должно работать:

to-report unnest [ xs ]
  let ys reduce sentence xs
  report ifelse-value (reduce or map is-list? ys) [ unnest ys ] [ ys ]
end

Выражение (reduce or map is-list? ys) интенсивно использует краткий синтаксис анонимной процедуры NetLogo, но оно просто означает "есть ли какой-либо элемент в ys списке?"

...