javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

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

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

所以我想知道的是:

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

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

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

trans by 2019-08-05T09:14:16Z

javascript - 如何在lodash中使用includes方法来检查对象是否在集合中?

lodash让我通过includes检查基本数据类型的成员资格:

_.includes([1, 2, 3], 2)
> true

但以下不起作用:

_.includes([{"a": 1}, {"b": 2}], {"b": 2})
> false

这让我感到困惑,因为以下搜索集合的方法似乎做得很好:

_.where([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}
_.find([{"a": 1}, {"b": 2}], {"b": 2})
> {"b": 2}

我究竟做错了什么? 如何使用includes检查集合中对象的成员资格?

编辑:问题最初是针对lodash版本2.4.1,更新为lodash 4.0.0

trans by 2019-07-23T21:35:45Z

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

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

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

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

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

trans by 2019-07-23T12:23:41Z

F#开发和单元测试?

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

到目前为止,我使用F#的过程是编写一些函数,使用交互式控制台与它们一起玩,直到我“合理地”确定它们的工作,并调整和调整。 结合。 这适用于像欧拉项目这样的小规模问题,但我无法想象以这种方式构建大的东西。

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

trans by 2019-07-23T06:58:53Z

python - 与函数式编程中的'fold'函数等效的'pythonic'是什么?

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

foldl (+) 0 [1,2,3,4,5]
--> 15

或者它在Ruby中的等价物:

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

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

trans by 2019-07-22T12:49:25Z

haskell - Applicatives撰写,monads don'

申请人撰写,monad没有。

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

trans by 2019-07-22T00:17:10Z

scala - 功能设计模式

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

trans by 2019-07-19T18:26:14Z

函数式编程 - 关于Haskell的大惊小怪是什么?

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

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

trans by 2019-07-10T14:21:54Z

haskell - 懒惰评估为何有用?

我一直想知道懒惰评估为何有用。 我还没有任何人以有道理的方式向我解释; 最重要的是它最终沸腾到了#34;相信我"。

注意:我不是指记忆。

trans by 2019-07-09T05:12:28Z

函数式编程 - 在Swi中使用索引进行映射或缩小

有没有办法在Swift中获取oddreduce中的数组索引? 我在Ruby中寻找像each_with_index这样的东西。

func lunhCheck(number : String) -> Bool
{
    var odd = true;
    return reverse(number).map { String($0).toInt()! }.reduce(0) {
        odd = !odd
        return $0 + (odd ? ($1 == 9 ? 9 : ($1 * 2) % 9) : $1)
    }  % 10 == 0
}

lunhCheck("49927398716")
lunhCheck("49927398717")

我想摆脱上面的odd变量。

trans by 2019-07-09T03:11:50Z

scala - 了解为什么Zipper是Comonad

这是对我上一个问题的答案的后续跟进。

假设我需要将每个项目cobind[A](f:Zipper[A] => B):Zipper[B]bind[A](f:A => List[B]):List[B]映射到List,功能Monad并生成Zipper

显然我不能只在列表上调用cobind[A](f:Zipper[A] => B):Zipper[B],但我可以使用列表拉链。 拉链是一个在列表中移动的光标。 它提供对当前元素(bind[A](f:A => List[B]):List[B])及其邻居的访问。

现在我可以用bind[A](f:A => List[B]):List[B]替换我的cobind[A](f:Zipper[A] => B):Zipper[B]并将此新功能List传递给Monad Zipper方法。

cobind[A](f:Zipper[A] => B):Zipper[B]的工作原理如下:它用拉链调用bind[A](f:A => List[B]):List[B],然后移动拉链,调用List和新的"移动" 拉链,再次移动拉链等等......直到拉链到达列表的末尾。

最后,cobind[A](f:Zipper[A] => B):Zipper[B]返回一个bind[A](f:A => List[B]):List[B]类型的新拉链,可以将其转换为列表,从而解决问题。

现在请注意cobind[A](f:Zipper[A] => B):Zipper[B]bind[A](f:A => List[B]):List[B]之间的对称性。这就是为什么ListMonadZipperComonad

是否有意义 ?

trans by 2019-07-08T17:34:02Z

sql - 数据库和函数式编程是否存在争议?

我有一段时间以来一直是网络开发人员,最近开始学习一些函数式编程。 和其他人一样,我在将这些概念应用到我的专业工作中时遇到了一些重大问题。 对我来说,主要原因是我发现FP之间的冲突与剩下的无状态目标之间的冲突似乎与我所做的大多数网络开发工作都与数据库密切相关的事实相矛盾。 是非常以数据为中心的。

让我成为OOP方面效率更高的开发人员的一件事是发现对象关系映射器,如.Net的MyGeneration d00dads,perl的Class :: DBI,ruby的ActiveRecord等。这让我远离 从整天编写插入和选择语句,并专注于作为对象轻松处理数据。 当然,我仍然可以在需要它们的时候编写SQL查询,但是否则它在幕后很好地抽象出来。

现在,转向函数式编程,似乎许多FP Web框架如Links需要编写大量的样板sql代码,如本例所示。 Weblock似乎好一点,但它似乎使用了一种OOP模型来处理数据,并且仍然需要为数据库中的每个表手动编写代码,如本例所示。 我想你使用一些代码生成来编写这些映射函数,但这似乎绝对不像lisp。

(注意我没有仔细查看Weblocks或Links,我可能只是误解了它们的使用方式)。

所以问题是,对于Web应用程序的数据库访问部分(我认为相当大),或者需要与sql数据库接口的其他开发,我们似乎被迫关闭以下路径之一:

  1. 不要使用功能编程
  2. 以恼人的,非抽象的方式访问数据,涉及手动编写大量SQL或类似SQL的代码链接
  3. 强制我们的功能语言成为伪OOP范例,从而消除了真正的函数式编程的一些优雅和稳定性。

显然,这些选项似乎都不合理。 是否找到了绕过这些问题的方法? 这里真的有一个问题吗?

注意:我个人最熟悉FP前端的LISP,所以如果您想提供任何示例并了解多种FP语言,那么lisp可能是首选语言

PS:对于Web开发其他方面的特定问题,请参阅此问题。

trans by 2019-07-08T00:55:18Z

types - 如何在Haskell中表示图形?

使用代数数据类型表示haskell中的树或列表很容易。 但是你会怎么用印刷术来表示图形呢? 看来你需要有指针。 我猜你可以有类似的东西

type Nodetag = String
type Neighbours = [Nodetag]
data Node a = Node a Nodetag Neighbours

这是可行的。 然而感觉有点脱钩; 结构中不同节点之间的链接并不真正感觉到#34; 与列表中当前上一个和下一个元素之间的链接,或树中节点的父项和子项之间的链接一样可靠。 我有一种预感,即在我定义的图形上进行代数操作会受到通过标签系统引入的间接级别的阻碍。

主要是这种怀疑的感觉和不雅的感觉使我提出这个问题。 在Haskell中定义图形是否有更好/更优化的方式? 或者我偶然发现了本质上坚硬/根本的东西? 递归数据结构很好,但这似乎是另一回事。 自引用数据结构,与树和列表的自引用方式不同。 它类似于列表和树在类型级别是自引用的,但是图形在值级别是自引用的。

那真正发生了什么?

trans by 2019-07-08T00:46:02Z

函数式编程 - 第一类函数和高阶函数之间的任何区别

我想知道第一类功能和高阶功能之间是否存在差异。

我仔细阅读了这两个维基页面,看起来非常相似。   如果他们谈论相同,为什么需要两个术语?

尝试谷歌但没有找到任何有用的东西。

trans by 2019-07-05T01:39:40Z

函数式编程 - 为什么Go中没有泛型?

免责声明:我现在只玩了一天Go,所以很有可能我错过了很多。

有没有人知道为什么Go中没有真正支持generics / templates / whatsInAName? 所以有一个通用的filter(predicate, list),但是由编译器提供,而Go程序员不能编写自己的实现。 尽管所有关于使Go尽可能正交的讨论,为什么我可以使用泛型类型但不创建新类型?

特别是在涉及函数式编程时,有lambda,甚至是闭包,但是对于缺少泛型的静态类型系统,我如何编写,以及通用的高阶函数,如filter(predicate, list)? 好的,链接列表等可以通过interface{}牺牲类型安全来完成。

由于对SO / Google的快速搜索没有透露任何见解,所以看起来像仿制药,如果有的话,将作为事后补充添加到Go。 我确实相信Thompson比Java家伙更好,但为什么要保持泛型? 或者他们是否有计划而尚未实施?

trans by 2019-07-04T23:34:34Z

什么是函数式语言中的“模式匹配”?

我正在阅读关于函数式编程的文章,我注意到许多文章都提到模式匹配是函数式语言的核心特性之一。

有人能为Java / C ++ / JavaScript开发人员解释这是什么意思吗?

trans by 2019-07-02T20:28:11Z

编程语言 - 真正理解程序和功能之间的区别

我真的很难理解程序和函数式编程范式之间的区别。

以下是维基百科关于函数式编程的前两段:

在计算机科学,功能   编程是一种编程范式   将计算视为   数学函数的评估   并避免状态和可变数据。 它   强调应用   功能,与之相反   命令式编程风格,其中   强调国家的变化。   功能编程有其根源   在lambda演算中,一个正式的系统   发展于20世纪30年代进行调查   功能定义,功能   应用程序和递归。 许多   函数式编程语言可以   被视为对此的详细阐述   lambda演算。

在实践中,a之间的区别   数学函数和概念   一个"功能" 在命令中使用   编程是当务之急   功能可能有副作用,   改变程序状态的值。   因此他们缺乏参考   透明度,即同一种语言   表达式可能导致不同   不同时间的价值取决于   执行程序的状态。   相反,在功能代码中,   函数的输出值取决于   仅限于输入的参数   到函数,所以调用一个函数   f两次具有相同的值   参数x将产生相同的   结果f(x)两次。消除   副作用可以使它更容易   理解和预测行为   一个程序,这是关键之一   发展的动机   函数式编程。

在第2段中,它说

相反,在函数代码中,函数的输出值仅取决于输入到函数的参数,因此,对于参数x,调用函数f两次将产生相同的结果f(x)

对于程序编程,这不是同样的确切情况吗?

什么应该在程序性和功能性中脱颖而出?

trans by 2019-07-02T01:39:13Z

f# - 折叠和减少之间的差异?

试图学习F#,但在尝试区分折叠和减少时感到困惑。 折叠似乎做同样的事情,但需要额外的参数。 是否存在这两种功能存在的合理原因,或者它们是否适合具有不同背景的人? (例如:C#中的字符串和字符串)

以下是从示例中复制的代码段:

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])
trans by 2019-07-01T00:10:18Z

函数式编程 - 同构函数的重要性

简短问题:同构函数在编程中的重要性是什么(即在函数式编程中)?

很长的问题:我试图根据我不时听到的一些术语,在类别理论中绘制函数式编程和概念之间的一些类比。 从本质上讲,我正在尝试将该术语“解包”成具体的东西然后我可以扩展。 然后,我将能够使用该术语,理解我正在谈论的那些 - 我正在谈论什么。 这总是很好。

我一直听到的这些术语之一是同构,我收集的是关于函数或函数组合之间等价的推理。 我想知道是否有人可以提供一些常见模式的一些见解,其中同构的属性派上用场(在函数式编程中),以及获得的任何副产品,例如从同构函数推理的编译器优化。

trans by 2019-06-23T16:38:45Z

数学 - 知道lambda演算有多大帮助?

对于所有了解lambda演算的人:在编程方面它给你带来了什么好处? 你会建议人们学习吗?

trans by 2019-06-19T09:22:48Z

上一页 1 2 3 4 5 6 7 8 9 10 11 12 下一页 共12页