我有一些代表选择的函数,每个选择都有不同的可取性。考虑
f1 : Seq[A] => Seq[A]
f2 : Seq[A] => Seq[A]
f3 : Seq[A] => Seq[A]
其中f1
比 更可取f2
,并且f3
是最不可取的。我编写了这个 scala 代码来生成做出 2 个连续选择的结果,按从最理想到最不理想的顺序排列
def applyTwice[A](initial: Seq[A],
f1: Seq[A] => Seq[A],
f2: Seq[A] => Seq[A],
f3: Seq[A] => Seq[A]): Seq[A] = {
lazy val f1s = f1(initial).toStream
lazy val f2s = f2(initial).toStream
lazy val f3s = f3(initial).toStream
f1(f1s) ++
f2(f1s) ++ f1(f2s) ++
f2(f2s) ++
f1(f3s) ++ f3(f1s) ++
f2(f3s) ++ f3(f2s) ++
f3(f3s)
}
一般来说,一系列功能应用是按照系列中最差的功能排名的。如果最差是平局,则比较第二个最差的,依此类推。例如,f4(f1(a))
会比f3(f3(a))
因为f4
比 更差f3
。请注意,它是 和 之间的f3(f2(a))
关系f2(f3(a))
。
我可能可以将其推广到可变数量的函数和(更困难的)可变数量的应用程序,但这似乎是一个我还不知道名称的经典问题。这是否已经内置到某些语言/库中?有没有更好的办法?