作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个递归代数数据类型来实现类似 Lisp 的嵌套列表:
data T a = N a | L [T a] deriving (Show, Eq)
L [N 1, L [N 2, L [N 3, L [N 4], N 5], N 6], N 7]
相当于 Lisp 的
(1 (2 (3 (4) 5) 6) 7)
.现在我想部分展平这个嵌套列表,即降低到某个级别,但仅此而已:
flattenN 0 t -- L [N 1,L [N 2,L [N 3,L [N 4],N 5],N 6],N 7]
flattenN 1 t -- L [N 1,N 2,L [N 3,L [N 4],N 5],N 6,N 7]
flattenN 2 t -- L [N 1,N 2,N 3,L [N 4],N 5,N 6,N 7]
flattenN 3 t -- L [N 1,N 2,N 3,N 4,N 5,N 6,N 7]
L
:
flattenN :: Int -> T a -> T a
flattenN 0 x = x
flattenN n (N x) = N x
flattenN n (L []) = L []
flattenN n (L (x:xs)) = flattenN (n-1) x +++ flattenN n (L xs)
where N x +++ N y = L [N x, N y]
N x +++ L ys = L (N x:ys)
L xs +++ N y = L (xs++[N y])
L xs +++ L ys = L (xs++ys)
最佳答案
我会写一个扁平化一次的函数,然后迭代它。像这样:
values (N x) = [N x]
values (L ts) = ts
flattenOnce (L ts) = L (concatMap values ts)
flattenOnce t = t
flattenN n t = iterate flattenOnce t !! n
flattenOnce
作为
flattenOnce t = L (concatMap values (values t))
关于haskell - 将树(嵌套列表)展平到一定深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28610955/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!