我正在开发Android应用程序使用可扩展列表视图。 其实我需要的是,我是上市组,其中包含孩子。 如果我select一个不可扩展的组,应该展开,当我select第二个组之后,第一个组应该被折叠。 我做了谷歌,但我找不到我想要的。 请帮我一下
什么是一些好的教程折叠左? 原始问题,从删除恢复为其他答案提供上下文: 我正在尝试实现一种方法来查找矩形,圆形,位置和所有扩展形状的组的方法。 组基本上是一个形状的数组 abstract class Shape case class Rectangle(width: Int, height: Int) extends Shape case class Location(x: Int, y: Int, shape: Shape) extends Shape case class Circle(radius: Int) extends Shape case class Group(shape: Shape*) extends Shape 我得到了除了组1之外的所有三个边界框。 所以,现在对于边界框方法,我知道我应该使用映射,并向左折叠组,但我无法find创build它的确切语法。 object BoundingBox { def boundingBox(s: Shape): Location = s match { case Circle(c)=> new Location(-c,-c,s) case […]
我不知道如何configuration记事本++来显示用户定义的关键字区域。 我有一个大的跟踪文件,它显示了一个过程的开始和结束。 跟踪文件如下所示: Beginn abc.def; … Beginn ghi.jkl; … Ende ghi.jkl; … Ende abc.def; 我想这样折叠这些区域: [+] Beginn abc.def; 要么 [-] Beginn abc.def; … [+] Beginn ghi.jkl; … Ende abc.def; 如何configuration我的记事本++来显示这个。 可能吗? 你有什么其他的build议?
注:我在Scala 2.8-可以是一个问题? 为什么我不能像foldLeft或foldRight一样使用fold函数? 在设置scaladoc它说: 折叠的结果可能只是这个并行集合的types参数T的超types。 但是我在函数签名中看不到types参数T : def fold [A1 >: A] (z: A1)(op: (A1, A1) ⇒ A1): A1 foldLeft-Right和fold之间有什么区别,我如何使用后者? 编辑:例如,我将如何写一个折叠来添加列表中的所有元素? 随着foldLeft这将是: val foo = List(1, 2, 3) foo.foldLeft(0)(_ + _) // now try fold: foo.fold(0)(_ + _) >:7: error: value fold is not a member of List[Int] foo.fold(0)(_ + _) ^
考虑一个单链表。 它看起来像 data List x = Node x (List x) | End 定义折叠函数是很自然的 reduce :: (x -> y -> y) -> y -> List x -> y 从某种意义上说, reduce f x0用reduce f x0代替每个Node用reduce f x0代替每个Node 。 这是前奏曲所指的折叠 。 现在考虑一个简单的二叉树: data Tree x = Leaf x | Branch (Tree x) (Tree x) 定义一个函数,如 reduce :: (y […]
在真实世界中Haskell ,第4章函数式编程 用foldr写foldl: — file: ch04/Fold.hs myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl fz xs = foldr step id xs z where step xga = g (fax) 上面的代码使我困惑不已,有些叫做dps的人用一些有意义的名字来重写它,使之更加清晰: myFoldl stepL zeroL xs = (foldr stepR id xs) zeroL where stepR lastL accR accInitL = accR (stepL accInitL lastL) […]
我有一个问题,从学习你一个Haskell (伟大的书,不要dising它)以下的段落: 一个很大的区别是,正确的折叠在无限的列表上工作,而左边的不是! 说白了,如果你在某个时候拿出一个无限的列表,而你从右侧折叠起来,你最终会到达列表的开头。 但是,如果你在一个点上有一个无限的列表,而你试图从左边折叠它,那么你将永远无法达到目的! 我只是不明白这一点。 如果你有一个无限的列表,试着把它从右边折叠起来,那么你将不得不从无穷远处开始,这是不会发生的(如果有人知道你可以做到这一点的语言, )。 至less,根据Haskell的实现,你必须从Haskell的实现开始,因为在Haskell中,foldr和foldl不会接受一个参数来确定列表中哪些位置应该开始折叠。 我会同意这个引用iff foldr和foldl接受了一个参数来确定列表中他们应该开始折叠的位置,因为如果你从一个已定义的索引中取出一个无限的列表并开始折叠, 它将最终终止,不pipe你从哪里开始, 你会向无穷大折叠。 然而,foldr和foldl 并不认为这个论点,因此这个引用是毫无意义的。 在Haskell中,无限列表中的左alignment和右alignment都不会终止 。 我的理解是正确的还是我错过了什么?
如何在Vim中启用自动折叠? set foldmethod=syntax似乎没有做任何事情。
我知道折叠产生左倾的树木,右折产生右倾的树木,但是当我到达折叠的时候,有时我发现自己陷入头痛的思考,试图确定哪种褶皱是合适的。 我通常最终解开整个问题,并逐步实现fold函数,因为它适用于我的问题。 所以我想知道的是: 确定是折叠还是折叠,有哪些经验法则? 鉴于我面临的问题,如何快速决定使用哪种types的折叠? 在Scala中有一个例子(PDF)使用fold来写一个叫做flatten的函数,它将元素列表连接成一个列表。 在这种情况下,正确的select是正确的select(考虑到列表的连接方式),但是我必须考虑一下才能得出结论。 由于折叠在(function)编程中是一种常见的行为,所以我希望能够迅速而自信地作出这种决定。 那么…任何提示?
试图学习F#,但试图区分折叠和缩小时感到困惑。 折叠似乎做同样的事情,但需要一个额外的参数。 这两个function是否存在合法的原因,或者是否有适应不同背景的人的需要? (例如:C#中的string和string) 这里是从示例复制的代码片段: let sumAList list = List.reduce (fun acc elem -> acc + elem) list let sumAFoldingList list = List.fold (fun acc elem -> acc + elem) 0 list printfn "Are these two the same? %A " (sumAList [2; 4; 10] = sumAFoldingList [2; 4; 10])