标签: reduce

保罗格雷厄姆的ANSI Common Lisp中的组合示例

任何人都可以在Paul Graham的ANSI Common Lisp第110页中解释一个例子吗?

该示例尝试解释use&rest和lambda来创建函数式编程工具.其中之一是构成函数参数的函数.我找不到任何解释它是如何工作的东西.代码如下:

(defun compose (&rest fns)
  (destructuring-bind (fn1 . rest) (reverse fns)
    #'(lambda (&rest args)
        (reduce #'(lambda (v f) (funcall f v))
                rest
                :initial-value (apply fn1 args)))))
Run Code Online (Sandbox Code Playgroud)

用法是:

(mapcar (compose #'list #'round #'sqrt)
        '(4 9 16 25))
Run Code Online (Sandbox Code Playgroud)

输出是:

((2) (3) (4) (5))
Run Code Online (Sandbox Code Playgroud)

2号线和6号线对我来说看起来特别神奇.任何意见将不胜感激.

lisp reduce closures common-lisp paul-graham

13
推荐指数
3
解决办法
1339
查看次数

来自map/null结果在couchdb中的null键

出于某种原因,我只是从mac中的couchdb中的map/reduce结果中获取一个null键

结果:

{"rows":[
{"key":null,"value":2224}
]}
Run Code Online (Sandbox Code Playgroud)

我使用couchapp v8.1和couchdb v1.0.2

我的地图功能是:

function(doc) {
    emit(doc.doc_type, 1);
}
Run Code Online (Sandbox Code Playgroud)

我的reduce函数是:

function(key, values, rereducer) {
  return sum(values);
}
Run Code Online (Sandbox Code Playgroud)

结果我期待:

{"rows":[
{"key":"type1","value":22}
{"key":"type2","value":32}
{"key":"type3","value":25}
 //snip snip
]}
Run Code Online (Sandbox Code Playgroud)

知道我哪里错了吗?

reduce couchdb map couchapp

13
推荐指数
1
解决办法
3351
查看次数

在Stream reduce方法中,对于sum,标识总是0,对于乘法,1必须是1?

我继续学习java 8.

我发现了有趣的行为:

让我们看看代码示例:

// identity value and accumulator and combiner
        Integer summaryAge = Person.getPersons().stream()
                //.parallel()  //will return surprising result
                .reduce(1, (intermediateResult, p) -> intermediateResult + p.age,
                        (ir1, ir2) -> ir1 + ir2);
        System.out.println(summaryAge);
Run Code Online (Sandbox Code Playgroud)

和模型类:

public class Person {

    String name;

    Integer age;
    ///...

    public static Collection<Person> getPersons() {
        List<Person> persons = new ArrayList<>();
        persons.add(new Person("Vasya", 12));
        persons.add(new Person("Petya", 32));
        persons.add(new Person("Serj", 10));
        persons.add(new Person("Onotole", 18));
        return persons;
   }
}
Run Code Online (Sandbox Code Playgroud)

12 + 32 + 10 + 18 = 72
对于序列流,此代码始终返回73(72 …

java reduce java-8 java-stream

13
推荐指数
3
解决办法
6357
查看次数

Elastic MapReduce中可用的减速器

我希望我能以正确的方式提出这个问题.我正在学习Elastic MapReduce的方法,并且我看到了许多对"Aggregate"减速器的引用,它可以与"Streaming"作业流程一起使用.

在亚马逊的"Amazon Elastic MapReduce简介"PDF中,它声明"Amazon Elastic MapReduce有一个名为aggregrate的默认缩减器"

我想知道的是:还有其他默认减速机可用吗?

我知道我可以编写自己的减速机,但我不想写完已经存在的东西并"重新发明轮子",因为我确信我的轮子不会像原来那样好.

reduce amazon hadoop aggregate mapreduce

12
推荐指数
2
解决办法
4589
查看次数

如何减少Common Lisp中的布尔值列表?

给定一个值列表,如果所有元素都不是NIL,我想将列表减少到T,否则就是NIL.这给了我一个错误:

(apply #'and (get-some-list))
Run Code Online (Sandbox Code Playgroud)

就像这样:

(reduce #'and (get-some-list))
Run Code Online (Sandbox Code Playgroud)

这是我提出的最好的:

[11]> (defun my-and (x y) (and x y))
MY-AND

[12]> (reduce #'my-and '(T T T T T))
T

[13]> (reduce #'my-and '(T T T T NIL))
NIL
Run Code Online (Sandbox Code Playgroud)

为什么"#"和"无效?在Common Lisp中有更惯用的方法吗?

reduce common-lisp apply

12
推荐指数
2
解决办法
2345
查看次数

python:来自多个字典的联合键?

我有5个词典,我想要一个他们的键的联合.

alldict =  [dict1, dict2, dict3, dict4, dict5]
Run Code Online (Sandbox Code Playgroud)

我试过了

allkey = reduce(lambda x, y: set(x.keys()).union(y.keys()), alldict)
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误

AttributeError: 'set' object has no attribute 'keys'
Run Code Online (Sandbox Code Playgroud)

我做错了吗?我使用普通的forloop但我想知道为什么上面的代码不起作用.

python reduce lambda dictionary

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

Hadoop:键和值在输出文件中以制表符分隔.怎么做以分号分隔?

我认为标题已经解释了我的问题.我想改变

key (tab space) value
Run Code Online (Sandbox Code Playgroud)

key;value
Run Code Online (Sandbox Code Playgroud)

在所有输出文件中,reducer是从映射器的输出生成的.

我用谷歌找不到这方面的好文档.任何人都可以提供一些关于如何实现这一目标的代码?

reduce hadoop mapreduce map

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

在JavaScript中使用reduceRight的真实世界示例

不久前,我在StackOverflow上发布了一个问题,表明JavaScript中的本机实现reduceRight很烦人.因此,我创建了一个Haskell风格的foldr函数作为补救措施:

function foldr(array, callback, initial) {
    var length = array.length;

    if (arguments.length < 3) {
        if (length > 0) var result = array[--length];
        else throw new Error("Reduce of empty array with no initial value");
    } else var result = initial;

    while (length > 0) {
        var index = --length;
        result = callback(array[index], result, index, array);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

但是,我从未使用过这个foldr函数,因为我从不需要从右到左遍历数组.这让我思考,为什么foldr我不像在Haskell中那样使用JavaScript,以及foldr在JavaScript 中使用什么样的真实世界示例?

我可能是错的,但我相信该foldr函数在Haskell中被广泛使用,原因是:

  1. 懒惰评估(foldl是尾递归,那么foldr如何比foldl运行得更快? …

javascript iteration reduce haskell fold

12
推荐指数
2
解决办法
1221
查看次数

Spark groupByKey另类

根据Databricks的最佳实践,groupByKey应该避免使用Spark ,因为Spark groupByKey处理的工作方式是首先将信息拖放到工作人员之间,然后进行处理.说明

所以,我的问题是,有哪些替代方案能够groupByKey以分布式和快速的方式返回以下内容?

// want this
{"key1": "1", "key1": "2", "key1": "3", "key2": "55", "key2": "66"}
// to become this
{"key1": ["1","2","3"], "key2": ["55","66"]}
Run Code Online (Sandbox Code Playgroud)

在我看来,可能aggregateByKey或者glom可以先在partition(map)中执行,然后将所有列表连接在一起(reduce).

python reduce apache-spark rdd pyspark

12
推荐指数
1
解决办法
4651
查看次数

ES6 - 从对象数组中删除重复项

假设一个对象数组如下:

const listOfTags = [
    {id: 1, label: "Hello", color: "red", sorting: 0},
    {id: 2, label: "World", color: "green", sorting: 1},
    {id: 3, label: "Hello", color: "blue", sorting: 4},
    {id: 4, label: "Sunshine", color: "yellow", sorting: 5},
    {id: 5, label: "Hello", color: "red", sorting: 6},
]
Run Code Online (Sandbox Code Playgroud)

如果标签和颜色相同,则重复输入.在这种情况下,id = 1且id = 5的对象是重复的.

如何过滤此数组并删除重复项?

我知道解决方案,您可以使用以下内容过滤一个键:

const unique = [... new Set(listOfTags.map(tag => tag.label)]
Run Code Online (Sandbox Code Playgroud)

但是多个键呢?

根据评论中的要求,这里是期望的结果:

[
    {id: 1, label: "Hello", color: "red", sorting: 0},
    {id: 2, label: "World", color: "green", sorting: 1}, …
Run Code Online (Sandbox Code Playgroud)

javascript reduce dictionary unique filter

12
推荐指数
4
解决办法
6159
查看次数