如何使用和初始化变量haskell

时间:2014-03-17 11:52:32

标签: haskell

我在Haskell中有一个给定列表的函数,返回它的一些排列。

我的问题是我必须给出列表的长度才能使函数正常工作。有没有办法使用letwhere

来改变它
generate_permutations list 0 = my_permutation 1 4 list
generate_permutations list n = list (my_permutation (list!!n) 4 list) ++ generate_permutations list (n-1)

我想用列表的长度初始化n。

  1. 我不知道该怎么做。
  2. 如果我设法这样做,我怎么能停止递归呢?

2 个答案:

答案 0 :(得分:2)

Haskell中没有变量赋值。但是,您可以使用where子句为表达式指定名称:

generate_permutations list =
    my_permutation (list!!n) 4 list ++ generate_permutations list (n-1)
  where
    n = length list

答案 1 :(得分:0)

通常的方法是使用where

generate_permutations list = go list (length list)
    where
        go xs 0 = my_permutation 1 4 list
        go xs n = list (my_permutation (list!!n) 4 list) ++ go list (n - 1)
        --        ^--- What is this doing here?  This will cause a type error

名称go非常适合此类功能,但您可以随意使用。假设my_permutation退出,此功能也会出现。您的递归以一种非常常见的模式从n = length list递减到n = 0