标签: functional-programming

将类型与数据构造函数关联的ADT编码有什么问题?(比如Scala.)

在Scala中,代数数据类型被编码为sealed一级类型层次结构.例:

-- Haskell
data Positioning a = Append
                   | AppendIf (a -> Bool)
                   | Explicit ([a] -> [a]) 
Run Code Online (Sandbox Code Playgroud)
// Scala
sealed trait Positioning[A]
case object Append extends Positioning[Nothing]
case class AppendIf[A](condition: A => Boolean) extends Positioning[A]
case class Explicit[A](f: Seq[A] => Seq[A]) extends Positioning[A]
Run Code Online (Sandbox Code Playgroud)

随着case classES和case objectS,斯卡拉产生了一堆东西一样equals,hashCode,unapply(通过模式匹配使用)等这使我们的许多关键特性和传统的ADT功能.

但是有一个关键的区别 - 在Scala中,"数据构造函数"有自己的类型.比较以下两个例子(从相应的REPL复制).

// Scala

scala> :t Append
Append.type

scala> :t AppendIf[Int](Function const true)
AppendIf[Int]

-- Haskell

haskell> :t Append …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming scala playframework argonaut

68
推荐指数
1
解决办法
2311
查看次数

python list comprehensions; 压缩列表列表?

家伙.我正试图找到一个问题最优雅的解决方案,并想知道python是否内置了我正在尝试做的事情.

我正在做的是这个.我有一个列表,A我有一个函数f,它接受一个项目并返回一个列表.我可以使用列表理解来转换所有内容A;

[f(a) for a in A]
Run Code Online (Sandbox Code Playgroud)

但这会返回列表清单;

[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]
Run Code Online (Sandbox Code Playgroud)

我真正想要的是得到扁平化的清单;

[b11,b12,b21,b22,b31,b32]
Run Code Online (Sandbox Code Playgroud)

现在,其他语言都有它; 它传统上称为flatmap函数式编程语言,而.Net称之为SelectMany.python有类似的东西吗?有没有一种巧妙的方法来映射列表上的函数并使结果变平?

我试图解决的实际问题是这个; 从目录列表开始,找到所有子目录.所以;

import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs
Run Code Online (Sandbox Code Playgroud)

currentliy给了我一个列表列表,但我真的想要一个列表.

python functional-programming list-comprehension

67
推荐指数
9
解决办法
5万
查看次数

为什么追加到列表不好?

我最近开始学习scala,并且我遇到了::(cons)函数,它在一个列表前面.
在"Scala编程"一书中,它指出没有附加函数,因为附加到列表具有性能o(n)而前置函数具有o(1)的性能

有些事情让我觉得这个说法错了.

性能是否依赖于实现?是不是可以简单地使用前向和后向链接实现列表并将第一个和最后一个元素存储在容器中?

我想的第二个问题是,当我有一个列表时,我应该做什么,比如说1,2,3,我想在它的末尾添加4个?

performance functional-programming scala

67
推荐指数
5
解决办法
2万
查看次数

Reactive和Functional-Reactive编程之间的区别

我最近一直在对反应式编程进行一些研究,我发现很难找到Reactive和Functional -Reactive 之间差异的良好描述.

是否只是使用功能方法/范例实现反应式编程而不是使用声明式或OO范式?

paradigms programming-languages functional-programming reactive-programming

67
推荐指数
2
解决办法
2万
查看次数

什么是"单点多态",我怎样才能从中受益?

Rick Hickey 在他的简单谈话中谈到了"按照多态性 "(约30:00进入视频).在同一个环境中,他还提到了Haskell的类型类和Clojure的多方法(和协议).

由于我对这些概念不太熟悉,因此我想了解它在实现简单性方面的用处.我对Scala中这个概念的任何示例或展示特别感兴趣.

functional-programming scala typeclass multimethod

67
推荐指数
1
解决办法
4389
查看次数

66
推荐指数
2
解决办法
2万
查看次数

可以使用正确性属性证明/模型检查/验证Haskell函数吗?

继续观念:有没有可证明的现实世界语言?

我不了解你,但我厌倦了编写我无法保证的代码.

在询问了上述问题并得到了非凡的回应之后(谢谢大家!)我决定缩小我对Haskell的可证明,实用的方法的搜索范围.我选择哈斯克尔,因为它是真正有用的(也有许多 网页 框架为它写在纸上,这似乎是一个很好的基准)我认为这是不够严格,在功能上,它可证明的,或者至少允许不变量的测试.

这就是我想要的(并且一直无法找到)

我想要一个可以查看Haskell函数的框架,添加,用psudocode编写:

add(a, b):
    return a + b
Run Code Online (Sandbox Code Playgroud)

- 并检查某些常量是否保持每个执行状态.我更喜欢一些正式的证据,但是我会满足于像模特检查员这样的东西.
在此示例中,不变量将是给定值ab,返回值始终是总和a + b.

这是一个简单的例子,但我不认为这样的框架不可能存在.对于可以测试的函数的复杂性肯定会有一个上限(函数的10个字符串输入肯定会花费很长时间!)但这会鼓励更仔细地设计函数,并且与使用其他正式函数没有什么不同方法.想象一下,使用Z或B,当您定义变量/集时,您可以确保为变量提供尽可能小的范围.如果您的INT永远不会超过100,请确保将其初始化为!像这样的技术和正确的问题分解应该 - 我认为 - 允许对像Haskell这样的纯函数语言进行令人满意的检查.

我还没有 - 使用正式方法或Haskell非常有经验.让我知道我的想法是否合理,或者你认为haskell不合适?如果您建议使用其他语言,请确保通过"has-a-web-framework"测试,并阅读原始问题 :-)

testing haskell formal-verification formal-methods functional-programming

66
推荐指数
4
解决办法
1万
查看次数

函数式编程中"无点"风格的优缺点是什么?

我知道在某些语言(Haskell?)中,努力是实现无点样式,或者永远不要通过名称显式引用函数参数.这对我来说是一个非常难以掌握的概念,但它可以帮助我理解这种风格的优点(或者甚至是缺点).谁能解释一下?

f# functional-programming pointfree

66
推荐指数
3
解决办法
4311
查看次数

什么是依赖打字?

有人可以向我解释依赖打字吗?我在Haskell,Cayenne,Epigram或其他函数式语言方面经验不足,因此您可以使用的术语越简单,我就越感激它!

functional-programming dependent-type

66
推荐指数
4
解决办法
7328
查看次数

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

假设我有一个包含大量项目的列表.

l = [ 1, 4, 6, 30, 2, ... ]
Run Code Online (Sandbox Code Playgroud)

我想从该列表中获取项目数,其中项目应满足特定条件.我的第一个想法是:

count = len([i for i in l if my_condition(l)])
Run Code Online (Sandbox Code Playgroud)

但是如果my_condition()过滤列表也有很多项,我认为为过滤结果创建新列表只是浪费内存.为了效率,恕我直言,以上呼叫不能比:

count = 0
for i in l:
    if my_condition(l):
        count += 1
Run Code Online (Sandbox Code Playgroud)

有没有任何功能风格的方法来获得满足特定条件的项目#而不生成临时列表?

提前致谢.

python functional-programming list count sequence

66
推荐指数
4
解决办法
7万
查看次数