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

Und*_*ren 1 haskell list

我之前试图解决这个问题,并且我已经搜索了一个解决方案,却找不到一个.

我需要一个函数,它接受一个列表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]]
Run Code Online (Sandbox Code Playgroud)

我试过这个:

list _ 0 = []
list xs n = do
    y <- xs
    ps <- list xs (n-1)
    return y : ps
Run Code Online (Sandbox Code Playgroud)

还有这个:

list _ 0 = []
list xs n = do
    y <- xs
    y : list xs (n-1)
Run Code Online (Sandbox Code Playgroud)

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

ram*_*ion 8

你非常接近!你的问题是你的基本情况list _ 0 = [].

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

尝试

list _ 0 = [[]]
list xs n = do
  y <- xs
  ps <- list xs (n-1)
  return $ y : ps
Run Code Online (Sandbox Code Playgroud)

  • 你不需要`return $ y:ps`? (5认同)
  • 或者,`list _ 0 = return []`与monad主题保持一致! (4认同)