使用Scala实现PRBS 7生成器(功能编程概念)

时间:2019-05-20 02:30:06

标签: scala

我正在尝试在Scala中实现PRBS生成器。 我读过很少有关Scala编程及其一般规则的文章,并且很多人建议不要使用“ var”和“ array”。事实证明这很困难,因为我对Scala编程(以及其他一般功能编程)没有很好的经验。

下面是我的PRBS 7生成器代码,但显然它使用的是Array和var,我认为这不是Scala编程的好习惯。 我应该如何修改下面的代码,使其看起来更像“ Scala友好代码”?

def prbs7_gen(len: Int, seed: Int) = {
    val a: Array[Int] = Array.fill(7)(0)
        (0 to 6).map(i => a(i) = seed >> i)
    var b = 0
    for (i <- 0 until len){
        b = a(6) ^ a(5)
        for (j <- 6 to 1 by -1)
            a(j) = a(j-1)
        a(0) = b
    }
}

prbs7_gen(15, 1)

1 个答案:

答案 0 :(得分:0)

使用标准库中的util.Random可能比大多数惯性尝试更为严格地近似随机性。

不过,如果出于某种原因,您想要将上述算法转换为更多与FP最佳实践(没有可变数据或数据结构)保持一致的方法,则是一种方法。

def prbs7_gen(len :Int, seed :Int) :Vector[Int] =
  (0 until len).foldLeft(Vector.tabulate(7)(seed.>>)) {
    (a,_) => (a(6) ^ a(5)) +: a
  }.take(7)