Haskell:一个函数,它接受一个列表xs和一个整数n,并返回长度为n的所有列表,其中包含xs中的元素

时间:2012-03-12 17:14:22

标签: list haskell

之前我曾试图解决这个问题,并且我一直在搜索解决方案而且找不到解决方案。

我需要一个带有列表xs和整数n的函数,并返回长度为n的所有列表,其中包含xs中的元素。例如:

function [0,1] 3 = [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]

我试过这个:

list _ 0 = []
list xs n = do
    y <- xs
    ps <- list xs (n-1)
    return y : ps

和此:

list _ 0 = []
list xs n = do
    y <- xs
    y : list xs (n-1)

没有按预期工作。我想知道两件事: 为什么这些不起作用? 我该如何修改它们才能起作用?

1 个答案:

答案 0 :(得分:8)

你非常接近!您的问题是您的基本案例list _ 0 = []

你所说的是没有长度为0的列表,其中包含xs中的元素,实际上只有一个是空列表。

尝试

list _ 0 = [[]]
list xs n = do
  y <- xs
  ps <- list xs (n-1)
  return $ y : ps