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?"
我可以做到以下几点:
> 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?"