标签: functional-programming

对于一个序列,什么是Python'枚举'的ES6等价物?

Python有一个内置函数enumerate,可以获得一(index, item)对可迭代的对.

ES6是否具有数组的等价物?它是什么?

def elements_with_index(elements):
    modified_elements = []
    for i, element in enumerate(elements):
         modified_elements.append("%d:%s" % (i, element))
    return modified_elements

print(elements_with_index(["a","b"]))
#['0:a', '1:b']
Run Code Online (Sandbox Code Playgroud)

ES6相当于没有enumerate:

function elements_with_index(elements){
     return elements.map(element => elements.indexOf(element) + ':' + element);
 }

console.log(elements_with_index(['a','b']))
//[ '0:a', '1:b' ]
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming ecmascript-6

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

monoid同态到底是什么?

我已经从Monoid Morphisms,Products和Coproducts中阅读了有关Monoid同态的知识,并且无法理解100%。

作者说(强调原文):

length函数从映射到StringInt 同时保留类半体结构。这种以一种保存方式从一个单半体映射到另一个单半体的函数称为单半体同态。通常,对于monoid MN,是同态f: M => N,以及所有值 x:My:M以下等式成立:

f(x |+| y) == (f(x) |+| f(y))

f(mzero[M]) == mzero[N]
Run Code Online (Sandbox Code Playgroud)

他的意思是说,由于数据类型StringInt是monoid ,并且函数length映射String => Int保留了monoid结构(Int是monoid),所以称为monoid同态,对吗?

haskell functional-programming scala category-theory monoids

60
推荐指数
2
解决办法
2432
查看次数

Java中的函数编程

Java中的函数式编程是否有一个很好的库?

我正在寻找像PredicateList.Find()这样的东西(作为静态方法).实现起来并不复杂,但在这里找到可重用的库会很不错.

java functional-programming

59
推荐指数
6
解决办法
4万
查看次数

带有回调的Python中的any()函数

Python标准库定义了一个any()函数

如果iterable的任何元素为true,则返回True.如果iterable为空,则返回False.

它仅检查元素是否评估为True.我希望它能够如此指定一个回调来判断一个元素是否符合以下条件:

any([1, 2, 'joe'], lambda e: isinstance(e, int) and e > 0)
Run Code Online (Sandbox Code Playgroud)

python functional-programming callback any

59
推荐指数
6
解决办法
7万
查看次数

Haskell函数应用和currying

我总是对学习新语言感兴趣,这一事实让我保持警惕,让我(我相信)成为更好的程序员.我征服Haskell的尝试来了又走 - 到目前为止两次 - 我决定是时候再试一次.第三次是魅力吧?

不.我重新阅读了我的旧笔记......并感到失望:-(

上次让我失去信心的问题很简单:整数的排列.即从整数列表到列表列表 - 列表的排列:

[int] -> [[int]]
Run Code Online (Sandbox Code Playgroud)

这实际上是一个普遍的问题,因此用'a'替换上面的'int'仍然适用.

从我的笔记:

我先自己编码,然后成功.欢呼!

我将我的解决方案发送给我的一位好朋友--Haskell大师,通常有助于向大师学习 - 他告诉我这个,据我所知,"表达了语言的真正力量,使用通用设施来编码你的需要".所有这一切,我最近喝了kool-aid,让我们走吧:

permute :: [a] -> [[a]]
permute = foldr (concatMap.ins) [[]]
   where ins x []     = [[x]]
         ins x (y:ys) = (x:y:ys):[ y:res | res <- ins x ys]
Run Code Online (Sandbox Code Playgroud)

嗯.让我们打破这个:

bash$ cat b.hs
ins x []     = [[x]]
ins x (y:ys) = (x:y:ys):[ y:res | res <- ins x ys]

bash$ ghci
Prelude> :load b.hs
[1 of 1] Compiling Main             ( b.hs, interpreted …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming currying

59
推荐指数
3
解决办法
5391
查看次数

F#在哪些领域"绝对没有意义"?

Don Syme在他的SPLASH演讲中表示,F#并不打算成为C#的替代品,尽管它具有一般功能.他继续说F#在使用方面没有任何意义,但没有扩展到论文.

  1. 有人可以告诉我在使用F#时应该避免哪些方面?
  2. 您还可以提到C#闪耀的区域.

相关问题:

在哪些方面,F#的使用比C#更合适?

c# oop f# functional-programming

59
推荐指数
6
解决办法
6105
查看次数

功能反应式编程语言规范

我正在寻找在某些时候创建功能性反应框架的麻烦.我已经阅读了很多关于它的内容,并看了几个例子,但我想清楚地知道这个框架必须做什么才能被认为是FRP扩展/ dsl.我并不真正关心实现问题或具体细节等,而是关注在完美世界情况下需要什么.

理想的功能反应式编程语言的关键操作和质量是什么?

programming-languages functional-programming frp semantics

59
推荐指数
2
解决办法
9339
查看次数

OOP接口和FP类型类之间的区别

可能重复:
Java的接口和Haskell的类型类:差异和相似之处?

当我开始学习Haskell时,我被告知类型类与接口不同且功能更强大.

一年后,我广泛使用了接口和类型,我还没有看到它们如何不同的示例或解释.这不是一种自然而然的启示,或者我错过了一些明显的东西,或者实际上没有真正的区别.

搜索互联网并没有发现任何实质性内容.那么,你有答案吗?

oop haskell functional-programming interface typeclass

59
推荐指数
2
解决办法
7983
查看次数

Impredicative类型与普通旧的子类型

我的一个朋友上周提出了一个看似无害的Scala语言问题,我没有得到一个好的答案:是否有一种简单的方法来声明属于某些常见类型类的东西的集合.当然,Scala中没有关于"类型类"的一流概念,因此我们必须从特征和上下文界限(即暗示)来考虑这一点.

具体地说,给定一些T[_]表示类型类型和类型的特征A,B并且C在范围内具有相应的含义T[A],T[B]并且T[C],我们希望声明类似于a的东西List[T[a] forAll { type a }],我们可以在其中抛出实例A,B并且C不受惩罚.这当然在Scala中不存在; 去年的一个问题更深入地讨论了这个问题.

自然的后续问题是"Haskell如何做到这一点?" 那么,GHC尤其具有称为impredicative polymorphism的类型系统扩展,在"Boxy Types"论文中有所描述.简而言之,给定一个类型类,T可以合法地构建一个列表[forall a. T a => a].给定这种形式的声明,编译器会执行一些字典传递魔术,它允许我们在运行时保留与列表中每个值的类型相对应的类型类实例.

事实是,"字典传递魔法"听起来很像"vtables".在像Scala这样的面向对象语言中,子类型是一种比"Boxy类型"方法更简单,更自然的机制.如果我们的A,B以及C所有延伸的特性T,那么我们可以简单地宣布List[T]并且快乐.同样,作为万里注意到,在评论下面,如果他们都继承特质T1,T2并且T3然后我可以使用List[T1 with T2 with T3]作为等同于impredicative哈斯克尔[forall a. (T1 …

haskell functional-programming scala subtype impredicativetypes

59
推荐指数
1
解决办法
1976
查看次数

维持Haskell中的复杂状态

假设您正在Haskell中构建一个相当大的模拟.有许多不同类型的实体,其属性随着模拟的进行而更新.让我们说,为了举例,您的实体被称为猴子,大象,熊等.

维护这些实体状态的首选方法是什么?

我想到的第一个也是最明显的方法是:

mainLoop :: [Monkey] -> [Elephant] -> [Bear] -> String
mainLoop monkeys elephants bears =
  let monkeys'   = updateMonkeys   monkeys
      elephants' = updateElephants elephants
      bears'     = updateBears     bears
  in
    if shouldExit monkeys elephants bears then "Done" else
      mainLoop monkeys' elephants' bears'
Run Code Online (Sandbox Code Playgroud)

mainLoop函数签名中明确提到的每种类型的实体已经很难看了.你可以想象,如果你有20种类型的实体,它会变得非常糟糕.(20对于复杂的模拟来说并非不合理.)所以我认为这是一种不可接受的方法.但它的优点在于它们的功能updateMonkeys非常明确:它们会获取Monkeys列表并返回一个新的.

那么接下来的想法是将所有内容都卷成一个包含所有状态的大数据结构,从而清理以下签名mainLoop:

mainLoop :: GameState -> String
mainLoop gs0 =
  let gs1 = updateMonkeys   gs0
      gs2 = updateElephants gs1
      gs3 = updateBears     gs2
  in
    if shouldExit gs0 then "Done" else
      mainLoop …
Run Code Online (Sandbox Code Playgroud)

state haskell functional-programming

59
推荐指数
1
解决办法
4106
查看次数