问题很简单:我无法理解Zipper数据结构。 我的问题是关于它与树的使用。 我想了解如何使用拉链更改树节点。 而如何不复制整个树(或大部分)。 请澄清,如果我错了拉链。 也许它不能帮助树更新? 或者,也许,有可能更新树,我只是不能看到的方式?
是否可以replace压缩文件中的文件而不解压缩删除旧文件添加新文件并重新压缩它? 原因是我有一个zip文件,这是真的很大有一个XML文件,我有时需要更新的zip文件。 解压缩并重新压缩需要很长时间。 所以我想只能通过一个脚本来replacezip中的一个xml。 我已经有了检查我有更新的XML。 那么是否有可能只取代一个XML而不解压缩和重新压缩? 对不起,我会使用zip命令来做这样的事情,但问题是脚本实际上是一个Android手机和邮编不是一个命令,我可以使用不幸的是,我离开了这一点。 如果可以的话,我会绝对使用zip,但我只有解压缩的机器人,然后有焦油busybox但焦油不做我所需要的
如何创build符合XSD的XML请求以使请求有效? 一种方法是创build整个请求,然后在XSD上进行validation。 有没有办法在模式中创build请求? 想到的第一个想法是拉链,但我真的不确定是否可以在这里使用。 也许我还没有很好地理解,但是如果已经有了一些定义好的结构并且需要改变结构的话,看起来Zipper就非常棒。 拉链可以用于变化的结构吗? (例如将序列附加到序列数组?)
鉴于任何容器types,我们可以形成(以元素为中心的)拉链,并知道这个结构是一个Comonad。 这是最近探讨在另一个堆栈溢出问题的以下types的精彩细节: data Bin a = Branch (Bin a) a (Bin a) | Leaf a deriving Functor 用下面的拉链 data Dir = L | R data Step a = Step a Dir (Bin a) deriving Functor data Zip a = Zip [Step a] (Bin a) deriving Functor instance Comonad Zip where … Zip是一个Comonad虽然它的实例有点多毛。 也就是说, Zip可以从Tree完全机械地派生出来,并且(我相信)以这种方式派生的任何types都自动成为Comonad ,所以我觉得应该是这样的,我们可以一般地自动构造这些types和它们的连接器。 […]
假设我有以下两个case class : case class Address(street: String, city: String, state: String, zipCode: Int) case class Person(firstName: String, lastName: String, address: Address) 和Person类的以下实例: val raj = Person("Raj", "Shekhar", Address("M Gandhi Marg", "Mumbai", "Maharashtra", 411342)) 现在,如果我想更新raj zipCode ,那么我将不得不这样做: val updatedRaj = raj.copy(address = raj.address.copy(zipCode = raj.address.zipCode + 1)) 随着更多的嵌套层次,这变得更加丑陋。 有没有一个更清洁的方式(像Clojure的update-in )来更新这样的嵌套结构?