标签: functional-programming

Haskell有什么大惊小怪的?

我知道有几个程序员在他们自己之间一直在讨论Haskell,所以每个人似乎都喜欢这种语言.擅长Haskell似乎有点像天才程序员的标志.

有人可以提供一些Haskell示例,说明为什么它如此优雅/优越?

haskell functional-programming

109
推荐指数
13
解决办法
4万
查看次数

什么是'pythonic'相当于函数式编程的'fold'函数?

在Haskell中实现类似以下内容的最惯用方法是什么:

foldl (+) 0 [1,2,3,4,5]
--> 15
Run Code Online (Sandbox Code Playgroud)

或者它在Ruby中的等价物:

[1,2,3,4,5].inject(0) {|m,x| m + x}
#> 15
Run Code Online (Sandbox Code Playgroud)

显然,Python提供了reduce函数,这是fold的实现,完全如上所述,然而,有人告诉我,'pythonic'编程方式是避免使用lambda术语和高阶函数,在可能的情况下更喜欢列表推导.因此,有没有一种首选的方法来折叠Python中的列表或类似列表的结构,而不是reduce函数,或者是reduce实现这一目的的惯用方法?

python reduce functional-programming list fold

108
推荐指数
6
解决办法
8万
查看次数

迭代范围的功能方式(ES6/7)

以更多功能方式执行以下操作的最佳方法是什么(使用ES6/ES7)

let cols = [];
for (let i =0; i <= 7; i++) {
   cols.push(i * i);
}
return cols;
Run Code Online (Sandbox Code Playgroud)

我试过,

return [ ...7 ].map(i => {
  return i * i;
});
Run Code Online (Sandbox Code Playgroud)

但那转化为

[].concat(7).map(function (n) {
  return n * n;
});
Run Code Online (Sandbox Code Playgroud)

这不是我的预期.

编辑:

@pavlo.的确,这是一个错误.我正在使用JSX,例如,我想要7个div,(未经测试)

let cols = [];
    for (let i =0; i <= 7; i++) {
       cols.push(<div id={i}> ...  </div>)
    }
    return cols;
Run Code Online (Sandbox Code Playgroud)

所以这个想法确实是为了减少临时变量和程序感觉的数量.

javascript functional-programming ecmascript-harmony ecmascript-6

108
推荐指数
3
解决办法
7万
查看次数

功能设计模式

有许多功能习语:monad,applicatives,arrows等.它们记录在不同的文章中,但不幸的是我不知道任何书籍或文章在一个地方汇总(有Typeclassopedia但它有很多没有很好覆盖的区域).任何人都可以推荐一篇文章/书籍,它可以在一个地方很好地覆盖它们,并且具有FP中级技能的程序员可以访问它吗?

monads haskell functional-programming scala

106
推荐指数
5
解决办法
9788
查看次数

F#开发和单元测试?

我刚开始使用F#,这是我的第一个功能语言.我一直在使用C#进行准独家工作,并且很享受F#引导我重新思考如何编写代码.我觉得有点迷惑的一个方面是编写代码的过程发生了变化.我现在已经在C#中使用TDD多年了,非常感谢有单元测试知道我在哪里.

到目前为止,我用F#过程中一直写一些功能,和他们一起玩与交互式控制台,直到我在"合理"确保他们的工作,并调整与合并.这适用于像欧拉项目这样的小规模问题,但我无法想象以这种方式构建大的东西.

人们如何进行单元测试并为F#程序构建测试套件?是否有相当于TDD?任何指针或想法都表示赞赏.

tdd f# unit-testing functional-programming

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

申请人撰写,monad没有

申请人撰写,monad没有.

上述陈述是什么意思?什么时候比其他人更好?

monads haskell functional-programming monad-transformers applicative

104
推荐指数
5
解决办法
1万
查看次数

如何在现实世界中使用函数式编程?

功能语言很好,因为它们通过消除状态来避免错误,但也因为它们可以很容易地自动并行化,而不必担心线程数.

作为Win32开发人员,我可以将Haskell用于我的应用程序的一些dll吗?如果我这样做,是否会为我自动采取真正的优势?如果是这样,那么编译器给我这个优势呢?

F#是否并行自动编写多个内核和cpu的函数?你会看到任务管理器中的线程数增加吗?

基本上我的问题是,如何以实用的方式开始使用Haskell,如果我这样做,我真的会看到一些好处吗?

f# haskell functional-programming

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

你怎么知道何时使用fold-left以及何时使用fold-right?

我知道fold-left会产生左倾的树木,右倾的树木产生右倾的树木,但是当我伸手去拿折叠时,我有时会发现自己陷入了引发头痛的想法,试图确定哪种折叠是合适的.我通常最终会解决整个问题并逐步执行fold函数,因为它适用于我的问题.

所以我想知道的是:

  • 确定是向右折叠还是向右折叠有哪些经验法则?
  • 考虑到我面临的问题,我如何快速决定使用哪种类型的折叠?

Scala by Example(PDF)中有一个示例,它使用折叠编写一个名为flatten的函数,该函数将元素列表列表连接成一个列表.在这种情况下,右侧折叠是正确的选择(考虑到列表连接的方式),但我必须考虑一下才能得出结论.

由于折叠是(功能)编程中的常见操作,因此我希望能够快速,自信地做出这些决策.所以...任何提示?

language-agnostic functional-programming fold

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

在MATLAB中映射函数?

我有点惊讶MATLAB没有Map功能,所以我自己一起攻击了一个,因为它是我不能没有的东西.那里有更好的版本吗?那里有一个有点标准的MATLAB函数式编程库我不见了吗?

function results = map(f,list)
% why doesn't MATLAB have a Map function?
results = zeros(1,length(list));
for k = 1:length(list)
    results(1,k) = f(list(k));
end

end
Run Code Online (Sandbox Code Playgroud)

用法是例如

map( @(x)x^2,1:10)
Run Code Online (Sandbox Code Playgroud)

matlab functional-programming map-function

97
推荐指数
3
解决办法
7万
查看次数

在纯函数式语言中,是否有算法来获得反函数?

在像Haskell这样的纯函数式语言中,是否存在一个算法来获取函数的逆,当它是双射的时(编辑)?是否有一种特定的方式来编程你的功能呢?

ocaml haskell functional-programming clojure

97
推荐指数
9
解决办法
1万
查看次数