具有可变输入数量的Haskell生成器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有可变输入数量的Haskell生成器?相关的知识,希望对你有一定的参考价值。

此刻我的代码看起来像这样:

gen (x:[]) = [[a] | a <- (someOp x)]
gen (x:y:[]) = [[a,b] | a <- (someOp x), b <- (someOp y)]
gen (x:y:z:[]) = [[a,b,c] | a <- (someOp x), b <- (someOp y), c <- (someOp z)]

...依此类推

是否有可能用gen(x:xs)来结束其余部分?

答案

您可以递归执行此操作:

gen [] = [[]]
gen (x:xs) = [ a:g | a <- someOp x, g <- gen xs ]

在每一步骤中,您将获取上一步生成的所有列表,并将它们与someOp的每个结果组合在一起。

您可以通过替换来验证这是否会变成特殊情况。

另一答案

对于您在此处构造的函数,已经存在一个更通用的函数:traverse :: (Applicative f, Traversable t) => (a -> f b) -> t a -> f (t b)。您的traverse :: (Applicative f, Traversable t) => (a -> f b) -> t a -> f (t b)等效于:

gen

以上是关于具有可变输入数量的Haskell生成器?的主要内容,如果未能解决你的问题,请参考以下文章

Python C++ API - 具有可变数量参数的重载函数

如何生成具有可变长度的随机字符串

计算光栅化片段的数量

在 Haskell 中为逻辑表达式生成真值表

Python:循环可变数量的输入

当输入的数量可变时,如何使用神经网络?