我在Haskell中有一个给定列表的函数,返回它的一些排列。
我的问题是我必须给出列表的长度才能使函数正常工作。有没有办法使用let
或where
?
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。
答案 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
。