标签: accumulator

Scheme/Racket最佳实践 - 递归与可变累积

我是Scheme(通过Racket)和(在较小程度上)函数式编程的新手,并且可以通过变量和递归使用一些关于积累的优缺点的建议.出于本示例的目的,我正在尝试计算移动平均线.因此,对于列表'(1 2 3 4 5),3期移动平均线将是'(1 2 2 3 4).我们的想法是,期间之前的任何数字都不是计算的一部分,一旦我们达到集合中的期间长度,我们就会根据所选择的期间开始对列表的子集进行平均.

所以,我的第一次尝试看起来像这样:

(define (avg lst)
  (cond
   [(null? lst) '()]
   [(/ (apply + lst) (length lst))]))

(define (make-averager period)
  (let ([prev '()])
    (lambda (i)
      (set! prev (cons i prev))
      (cond
       [(< (length prev) period) i]
       [else (avg (take prev period))]))))

(map (make-averager 3) '(1 2 3 4 5))

> '(1 2 2 3 4)
Run Code Online (Sandbox Code Playgroud)

这有效.我喜欢使用地图.它看起来很容易构建并且可以重构.我可以在将来看到堂兄弟像:

(map (make-bollinger 5) '(1 2 3 4 5))
(map (make-std-deviation 2) '(1 2 3 …
Run Code Online (Sandbox Code Playgroud)

recursion scheme accumulator racket

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

Prolog累加器.它们真的是一个"不同"的概念吗?

我正在我的人工智能实验室学习Prolog,从源头学习Prolog Now!.

在第5章中,我们来了解累加器.作为示例,给出了这两个代码片段. 查找列表的长度

没有累加器:

len([],0).
len([_|T],N) :- len(T,X), N is X+1.
Run Code Online (Sandbox Code Playgroud)

与累加器:

accLen([_|T],A,L) :- Anew is A+1, accLen(T,Anew,L).
accLen([],A,A).
Run Code Online (Sandbox Code Playgroud)

我无法理解,这两个片段在概念上有何不同?累加器到底有什么不同?有什么好处?

蓄能器听起来像中间变量.(如果我错了,请纠正我.)到目前为止,我已经在我的程序中使用过它们,所以它真的是一个很大的概念吗?

recursion tail-recursion prolog accumulator

9
推荐指数
3
解决办法
3968
查看次数

Python 3.2 - readline()正在跳过源文件中的行

我有一个我用多行创建的.txt文件.

当我使用计数累加器运行for循环时,它会跳过行.

它跳过顶线,从第二个开始,打印第四个,第六个等...

我错过了什么?

** for your reading pleasure**
def main():
    # Open file line_numbers.txt
    data_file = open('line_numbers.txt', 'r')

    # initialize accumulatior
    count = 1


    # Read all lines in data_file
    for line in data_file:
        # Get the data from the file
        line = data_file.readline()

        # Display data retrieved
        print(count, ": ", line)

        # add to count sequence
        count += 1
Run Code Online (Sandbox Code Playgroud)

python readline accumulator

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

递归状态monad用于在构建列表时累积值?

如果问题很愚蠢的话,我对Haskell完全不熟悉.

我想要做的递归是建立一个列表,而在同一时间建立的累计值基础上的递归调用.这是我正在为Coursera课程做的一个问题,所以我不会发布确切的问题,但类似的东西.

例如说我想采取INTS的列表和双每一个(忽略,我可以只使用例子的目的map),但我想计数数"5"有多少次出现在列表中.

所以要加倍我可以做到这一点:

foo []     = []
foo (x:xs) = x * 2 : foo xs
Run Code Online (Sandbox Code Playgroud)

到目前为止这么容易.但是我怎样才能保持五倍的计数x呢?我得到的最好的解决方案是使用这样的显式累加器,我不喜欢它,因为它反转列表,所以你需要在结束时反向:

foo total acc []     = (total, reverse acc)
foo total acc (x:xs) = foo (if x == 5 then total + 1 else total) (x*2 : acc) xs
Run Code Online (Sandbox Code Playgroud)

但我觉得这应该能够被Statemonad 处理得更好,我之前没有用过,但是当我尝试构建一个适合我看到的模式的函数时,我会因为递归调用而陷入困境foo.有没有更好的方法来做到这一点?

编辑:我需要这个工作很长的列表,所以任何递归调用也需要尾递归.(由于Haskell的'tail recursion modulo cons',我在这里的例子设法是尾递归的).

recursion haskell state-monad accumulator

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

在foldLeft中递增变量

我有像这样的Scala代码

var i = 1
for(e <- array) {
    acc += e * i
    i += 1
}
Run Code Online (Sandbox Code Playgroud)

我需要将数组中的第一个元素乘以1,将下一个元素乘以2,将下一个元素乘以3,然后将它们全部添加到累加器中.我觉得在Scala中有更好的方法,甚至可以折叠?

arrays scala increment accumulator

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

为什么mov指令直接使用ax而不是两个段寄存器?

我看到代码如下:

mov ax, cs
mov ds, ax
mov es, ax
Run Code Online (Sandbox Code Playgroud)

为什么我不能将其压缩为:

mov ds, cs
mov es, cs
Run Code Online (Sandbox Code Playgroud)

自使用累加器寄存器以来,第一种方式更快吗?但这似乎并不直观,因为cs和ds是段寄存器.还是有一些我不知道的限制?

顺便说一句,我正在使用nasm.

x86 assembly nasm accumulator addressing-mode

6
推荐指数
1
解决办法
604
查看次数

计数器和累加器之间有什么区别?

我不确定有什么不同,但问题就在这里.

编写一个赋值语句,名为numStudents的计数器变量更新为1.它是否为:

numStudents = numStudents + 1

?我的另一个问题是

编写赋值语句,使用sales变量中的值更新名为total的累加器变量. 会不会像:

总计=总计+销售额

c++ counter accumulator

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

使用Python减少对列表

我正在尝试将列表中的一堆元素组合在一起以创建最终对象,其方式类似于创建对象的总和.我正在尝试使用一个简单的变体来reduce考虑一个对的列表而不是一个平面列表来执行此操作.我想做一些事情:

nums = [1, 2, 3]
reduce(lambda x, y: x + y, nums)
Run Code Online (Sandbox Code Playgroud)

除了我想在数字列表中的每个元素的特定总和中添加附加信息nums.例如,对于列表中的每对(a,b),将总和运行为(a + b):

nums = [(1, 0), (2, 5), (3, 10)]
reduce(lambda x, y: (x[0]+x[1]) + (y[0]+y[1]), nums)
Run Code Online (Sandbox Code Playgroud)

这不起作用:

>>> reduce(lambda x, y: (x[0]+x[1]) + (y[0]+y[1]), nums)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: 'int' object is unsubscriptable
Run Code Online (Sandbox Code Playgroud)

为什么不起作用?我知道我可以编码nums为一个平面列表 - 这不是重点 - 我只是希望能够创建一个reduce操作,可以遍历一对对,或同时在两个相同长度的列表上迭代,并从两个池中汇集信息名单.谢谢.

python reduce functional-programming map accumulator

6
推荐指数
1
解决办法
3657
查看次数

在JavaScript中将几个数组组合成一个对象数组

假设我有三个数组,描述了一些名称,阅读的书籍数量以及这些人[名字]中有多棒:

let names = ["Mary", "Joe", "Kenan"];
let numberOfBooks = [2, 1, 4];
let awesomenessLevel = ["pretty cool", "meh", "super-reader"];
Run Code Online (Sandbox Code Playgroud)

我正在尝试.reduce()将它们组合在一起以创建一个包含每个数组中相关索引的对象数组,但我失败了:

    let people = [
    {
       name: "Mary",
       noOfBooks: 2,
       awesomeness: "pretty cool"
    },
    {
       name: "Joe",
       noOfBooks: 1,
       awesomeness: "meh"
    },
    {
       name: "Kenan",
       noOfBooks: 4,
       awesomeness: "super-reader"
    }
  ]
Run Code Online (Sandbox Code Playgroud)

我也减少了它:

let arrFinal = [];

 names.reduce(function(all, item, index) {
  arrFinal.push({
    name: item,
    noOfBooks: numberOfBooks[index],
    awesomeness: awesomenessLevel[index]
  })
}, []);
Run Code Online (Sandbox Code Playgroud)

javascript arrays reduce accumulator

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

编写程序集时使用哪些寄存器重要吗?

如果您正在编写程序集,那么将值分配给哪个寄存器重要吗?假设您将累积/中间值存储在 %ebx 而不是 %eax 中,后者传统上用于此目的。这是不好的做法吗?会影响性能吗?

换句话说,您是否可以将它们等同于存储空间,还是应该坚持将它们用于特定目的?

x86 assembly cpu-registers accumulator

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