Tag: 函数编程

学习scala的小型和好的scala项目 – 尤其是函数式编程和types系统

我已经学习了几个月的Scala,但仍然在初学者水平。 现在我发现我在函数式编程和scala的types系统方面遇到了很大的麻烦。 我试图find一些文件和博客,但我不明白其中的大部分(尤其是types系统的)。 所以我正在寻找一些小的,很好的Scala项目,我可以阅读来源学习。 你能推荐我一些吗?

python:从列表(序列)中获取具有一定条件的项目数

假设我有一个包含大量项目的列表。 l = [ 1, 4, 6, 30, 2, … ] 我想从列表中获取项目的数量,其中项目应该满足某些条件。 我的第一个想法是: count = len([i for i in l if my_condition(l)]) 但是,如果my_condition()过滤列表也有很多项目,我认为创build新的过滤结果列表只是浪费内存。 为了效率,恕我直言,上述呼叫不能比: count = 0 for i in l: if my_condition(l): count += 1 是否有任何function风格的方式来获得满足一定条件的项目#而不生成临时列表? 提前致谢。

星火代码组织和最佳实践

所以,在代码重用,devise模式和最佳实践经常被考虑在面向对象的世界里花费了很多年的时候,我发现自己在代码组织和代码重用方面有点挣扎。 如果我试图以可重用的方式编写代码,它几乎总会带来性能成本,我最终将其重写为任何最适合我的特殊用例。 这个常量“写出对这个特定用例最合适的”也会影响代码的组织,因为当“它全部真的属于一起”时,将代码分解成不同的对象或模块是困难的,因此我最终得到的只有很less的“神”复杂的转化链。 事实上,我经常想,如果我在面向对象的世界工作时,大部分我现在正在写的Spark代码,我会畏缩并将其视为“意大利面代码”。 我上网试图find某种相当于面向对象的世界的最佳实践,但没有太多的运气。 我可以find一些函数式编程的“最佳实践”,但是Spark只是增加了一个额外的层,因为性能在这里是一个很重要的因素。 所以我对你的问题是,有没有你的火花大师发现了一些编写Spark代码的最佳实践,你可以推荐? 编辑 正如在评论中写的,我实际上并没有期待任何人就如何解决这个问题发表一个答案,而是我希望在这个社区中有人遇到了一些Martin Fowlertypes,他们在某处写过som文章或博客文章关于如何解决Spark世界中代码组织的问题。 @DanielDarabosbuild议我可以举一个代码组织和性能相互冲突的例子。 虽然我发现在日常工作中我经常遇到这个问题,但是我发现把它简化成一个很好的小例子有点困难;但是我会尽力的。 在面向对象的世界中,我是单一职责原则的忠实粉丝,所以我会确保我的方法只对一件事负责。 它使得它们可重用,易于testing。 所以,如果我不得不说,计算列表中的一些数字的总和(匹配一些标准),我必须计算相同数字的平均数,我肯定会创build两个方法 – 一个计算总和和一个计算平均值。 喜欢这个: def main(implicit args: Array[String]): Unit = { val list = List(("DK", 1.2), ("DK", 1.4), ("SE", 1.5)) println("Summed weights for DK = " + summedWeights(list, "DK") println("Averaged weights for DK = " + averagedWeights(list, "DK") } def summedWeights(list: […]

我如何将Haskelltypes类转换为F#?

我试图将Haskell核心库的箭头翻译成F#(我认为这对于更好地理解箭头和F#是一个很好的练习,我可能可以在我正在进行的项目中使用它们)。但是,直接翻译由于范式的不同,是不可能的。 Haskell使用types类来expression这些东西,但是我不确定F#构造的最好用F#的习惯用法映射types类的function。 我有一些想法,但最好把它提出来,看看什么被认为是最接近的function。 对于人群:如何将types类(一个Haskell成语)翻译成F#惯用代码? 对于那些接受我长久解释的人来说: Haskell标准库中的代码就是我试图翻译的一个例子: class Category cat where id :: cat aa comp :: cat ab -> cat bc -> cat ac class Category a => Arrow a where arr :: (b -> c) -> abc first :: abc -> a (b,d) (c,d) instance Category (->) where id f = f instance Arrow […]

为什么在Racket中以一种奇怪的方式定义foldl?

在Haskell中,与其他许多函数式语言一样,函数foldl被定义为使得例如foldl (-) 0 [1,2,3,4] = -10 。 这是可以的,因为根据定义, foldl (-) 0 [1, 2,3,4]是((((0 – 1) – 2) – 3) – 4) 。 但是,在Racket中, (foldl – 0 '(1 2 3 4))是2,因为Racket“智能地”计算如下: (4 – (3 – (2 – (1 – 0)))) 2。 当然,如果我们定义辅助function翻转,像这样: (define (flip bin-fn) (lambda (xy) (bin-fn yx))) 那么我们可以在Racket中实现与Haskell相同的行为:而不是(foldl – 0 '(1 2 3 4))我们可以写成: […]

OOP接口和FPtypes之间的区别

可能重复: Java的接口和Haskell的types类:差异和相似之处? 当我开始学习Haskell时,我被告知types类比接口更强大/不同。 一年以后,我已经广泛地使用了接口和types类,我还没有看到一个例子或解释,他们是如何不同。 这不是一个自然而然的启示,我错过了一些显而易见的事实,或者实际上并没有真正的区别。 search互联网并没有带来任何实质性的进展。 所以呢,你有答案吗?

在Java8中引入lambdas会改变或影响哪个GoFdevise模式?

许多人声称,GoFdevise模式的最大部分只是缺乏头等function的解决方法。 现在Java即将获得lambdaexpression式,那么这些模式中的哪些将受到它们的影响? 哪些可以大大简化或泛化? 哪些基本上保持不变? 任何实际的例子是受欢迎的

如何让F#与Mono一起工作?

我似乎无法find单声道的编译器/插件。 有一个存在吗?

这个lambda / yield / generator理解是如何工作的?

我今天正在查看我的代码库,发现这个: def optionsToArgs(options, separator='='): kvs = [ ( "%(option)s%(separator)s%(value)s" % {'option' : str(k), 'separator' : separator, 'value' : str(v)} ) for k, v in options.items() ] return list( reversed( list( (lambda l, t: (lambda f: (f((yield x)) for x in l) )(lambda _: t) )(kvs, '-o') ) ) ) 它似乎需要一个参数的字典,并把它们变成一个shell命令的参数列表。 它看起来像是在一个生成器理解中使用yield,我认为这是不可能的。 >>> optionsToArgs({"x":1,"y":2,"z":3}) ['-o', 'z=3', […]

为什么Haskell代数数据types“closures”?

纠正我,如果我错了,但它似乎像Haskell中的代数数据types在许多情况下,你会使用面向对象语言的类和inheritance有用。 但是有一个很大的区别:一旦声明了一个代数数据types,就不能在其他地方扩展。 这是“closures”。 在OO中,你可以扩展已经定义的类。 例如: data Maybe a = Nothing | Just a 没有办法,我可以以某种方式添加另一个选项,这种types稍后没有修改此声明。 那么这个系统有什么好处呢? 看来OO的方式会更具可扩展性。