标签: functional-programming

如何在Scala中使用map并接收索引?

是否存在任何类似的List/Sequence map并提供元素的索引?

functional-programming scala map

96
推荐指数
6
解决办法
5万
查看次数

这是一个纯函数吗?

大多数将纯函数定义为具有以下两个属性:

  1. 对于相同的参数,其返回值相同。
  2. 其评估没有副作用。

这是与我有关的第一个条件。在大多数情况下,很容易判断。考虑以下JavaScript函数(如本文所示)

纯:

const add = (x, y) => x + y;

add(2, 4); // 6
Run Code Online (Sandbox Code Playgroud)

不纯:

let x = 2;

const add = (y) => {
  return x += y;
};

add(4); // x === 6 (the first time)
add(4); // x === 10 (the second time)
Run Code Online (Sandbox Code Playgroud)

不难看出,第二个函数将为后续调用提供不同的输出,从而违反了第一个条件。因此,这是不纯的。

这部分我明白了。


现在,对于我的问题,考虑以下函数,该函数将给定的美元金额转换为欧元:

(编辑- const在第一行中使用。let较早地使用。)

const exchangeRate =  fetchFromDatabase(); // evaluates to say 0.9 for today;

const dollarToEuro = (x) => {
  return …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming function

96
推荐指数
7
解决办法
7308
查看次数

Haskell组合(.)与F#的管道前向运算符(|>)

在F#中,使用管道前向运算符|>非常常见.但是,在Haskell中,我只见过使用过的函数组合(.).我知道它们是相关的,但是有没有一种语言原因在Haskell中没有使用管道转发,还是其他什么?

f# haskell functional-programming composition

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

中型Clojure样品应用?

是否有一个中等大小的Clojure示例应用程序可以用作"最佳实践"示例,并且是一种很好的方法来查看这样的应用程序在代码和代码组织方面会是什么样子?Web应用程序对我来说特别有趣,但最重要的是该程序执行一些通常有用的东西(例如,博客,错误跟踪,CMS),而不是我从未在真实中实现过的数学世界(解决N-queens问题,模拟生命,生成Fibonacci序列,以及功能编程语言的常用功能).

谢谢!

functional-programming clojure

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

Scala中的val-mutable与var-immutable

Scala中是否有关于何时使用可变集合的val与使用带有不可变集合的var的指南?或者你真的应该用不可变的集合来瞄准val吗?

事实上,这两种类型的集合给了我很多选择,而且我常常不知道如何做出这种选择.

collections functional-programming scala immutability

94
推荐指数
3
解决办法
1万
查看次数

什么是paramorphisms?

通过阅读这篇经典论文,我坚持认为是paramorphisms.不幸的是,该部分非常薄,维基百科页面没有说什么.

我的Haskell翻译是:

para :: (a -> [a] -> b -> b) -> b -> [a] -> b
para f base = h
  where
    h []       =   base
    h (x:xs)   =   f x xs (h xs)
Run Code Online (Sandbox Code Playgroud)

但我不认为 - 我对类型签名或期望的结果没有任何直觉.

什么是paramorphism,什么是行动中的一些有用的例子?


是的,我已经看过这些 问题了,但是它们并没有直接涵盖paramorphisms,只指向可能有用作为参考的资源,而不是学习资料.

recursion haskell functional-programming higher-order-functions

94
推荐指数
1
解决办法
5342
查看次数

在Swift数组上设置操作(union,intersection)?

我是否可以使用任何标准库调用来对两个数组执行set操作,或者自己实现这样的逻辑(理想情况下尽可能功能和高效)?

functional-programming set-operations swift

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

功能编程 - 不变性是否昂贵?

问题分为两部分.第一个是概念性的.接下来在Scala中更具体地看待同一个问题.

  1. 在编程语言中仅使用不可变数据结构是否会使实现某些算法/逻辑在实践中本身具有更高的计算成本?这就意味着不变性是纯函数式语言的核心原则.还有其他因素会对此产生影响吗?
  2. 我们来看一个更具体的例子.Quicksort通常使用内存数据结构中的可变操作来教授和实现.如何以可靠的功能方式实现这样的事情,具有与可变版本相当的计算和存储开销.特别是在Scala中.我在下面列出了一些原油基准.

更多细节:

我来自命令式编程背景(C++,Java).我一直在探索函数式编程,特别是Scala.

纯函数式编程的一些主要原则:

  1. 职能是一等公民.
  2. 函数没有副作用,因此对象/数据结构是不可变的.

尽管现代JVM对于创建对象非常有效,并且垃圾收集对于短期对象来说非常便宜,但是最小化对象创建可能更好吗?至少在并发和锁定不是问题的单线程应用程序中.由于Scala是一种混合范例,如果需要,可以选择使用可变对象编写命令式代码.但是,作为一个花了很多年时间试图重用对象并最小化分配的人.我希望对那些甚至不允许这样的思想流派有一个很好的理解.

作为一个特例,我对本教程中的 代码片段感到有些惊讶6.它有一个Java版本的Quicksort,后面是一个整洁的Scala实现.

这是我尝试对实现进行基准测试.我没有做过详细的剖析.但是,我的猜测是Scala版本较慢,因为分配的对象数是线性的(每个递归调用一个).尾调用优化是否有可能发挥作用?如果我是对的,Scala支持自我递归调用的尾调用优化.所以,它应该只是帮助它.我正在使用Scala 2.8.

Java版本

public class QuickSortJ {

    public static void sort(int[] xs) {
      sort(xs, 0, xs.length -1 );
    }

    static void sort(int[] xs, int l, int r) {
      if (r >= l) return;
      int pivot = xs[l];
      int a = l; int b = r;
      while (a <= b){
        while (xs[a] <= pivot) a++;
        while (xs[b] > pivot) …
Run Code Online (Sandbox Code Playgroud)

java functional-programming scala

93
推荐指数
8
解决办法
8347
查看次数

Map,parseInt的奇怪行为

可能重复:
javascript - Array.map和parseInt

在twitter上看到了这个奇怪的JavaScript行为示例

['10','10','10','10','10'].map(parseInt)
Run Code Online (Sandbox Code Playgroud)

评估为

[10, NaN, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

有人可以解释这种行为吗?我用铬和萤火虫验证了它

['10','10','10','10','10'].map(function(x){return parseInt(x);})
Run Code Online (Sandbox Code Playgroud)

正确返回10的数组作为整数.这是不正确使用map(),parseInt的错误还是其他什么?

javascript functional-programming

93
推荐指数
3
解决办法
1万
查看次数

函数式编程中的reduce和foldLeft/fold之间的区别(特别是Scala和Scala API)?

为什么Scala和像Spark和Scalding这样的框架都有reducefoldLeft?那么reduce和之间的区别是fold什么?

reduce functional-programming scala fold scalding

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