相关疑难解决方法(0)

如何定义Haskell中的"阻塞"粒度?

我注意到这在Haskell中是不合法的:

foo :: [a] -> [a]
foo [] = []

bar = 3

foo (x:xs) = x : foo xs
Run Code Online (Sandbox Code Playgroud)

但是,这是:

foo :: [a] -> [a]

bar = 3

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

虽然函数匹配的模式必须全部组合在一起,但类型签名似乎可以漂移.但到目前为止?我被告知它必须处于相同的"块"......但从技术上讲,究竟什么是"块"?

haskell language-lawyer

4
推荐指数
1
解决办法
100
查看次数

笛卡尔积在Haskell中的列表列表中

给定x所有子列表具有相同长度的长度列表列表y,输出包含每个子列表中的一个项目y^x的长度x列表.

示例(x = 3,y = 2):

[ [1, 2], [3, 4], [5, 6] ]
Run Code Online (Sandbox Code Playgroud)

输出(2^3 == 8不同输出):

[ [1, 3, 5], [1, 4, 5], [1, 3, 6], [1, 4, 6],
  [2, 3, 5], [2, 4, 5], [2, 3, 6], [2, 4, 6] ]
Run Code Online (Sandbox Code Playgroud)

我的研究/工作

红宝石

我编写了实际代码来执行此任务,但在Ruby中,因为它是我最熟悉的语言.

def all_combinations(lst)
   lst.inject {|acc, new| acc.product(new).map(&:flatten) }
end
Run Code Online (Sandbox Code Playgroud)

类型

输入是包含类型a的项的列表列表,输出也是如此.

allProduct :: [[a]] -> [[a]]
Run Code Online (Sandbox Code Playgroud)

笛卡尔积,扁平化和折叠

看看我的Ruby解决方案让我觉得充分利用这些功能可能足以解决问题.问题是虽然笛卡尔积输出了一个元组列表,但我需要一个列表列表.

haskell functional-programming combinatorics

4
推荐指数
1
解决办法
823
查看次数