Netlogo:如何展平列表列表的列表?

Netlogo: How do I flatten a list of lists of lists?

我可以做到以下几点:

> 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]

如果你确定你的列表只有两层深,你可以简单地做:

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 简洁的匿名过程语法,但它只是表示 "is any item in ys a list?"