Haskell lambda函数中的冒号?
我不理解冒号在以下lambda表达式中的作用:Haskell lambda函数中的冒号?,haskell,lambda,Haskell,Lambda,我不理解冒号在以下lambda表达式中的作用: myFunction :: [Int] -> [Int] myFunction li = foldr (\x acc -> if x < 10 then x : acc else acc) [last li] li 我习惯于看到递归操作的冒号,但是看起来这个冒号实际上是在对当前累加器列表进行前置,对吗 :是一个数据构造函数。它将a类型的值前置到[a]类型的现有可能为空的列表中 您可以将列表类型构造函数描述为如下定义: data
myFunction :: [Int] -> [Int]
myFunction li = foldr (\x acc -> if x < 10 then x : acc else acc) [last li] li
我习惯于看到递归操作的冒号,但是看起来这个冒号实际上是在对当前累加器列表进行前置,对吗 :是一个数据构造函数。它将a类型的值前置到[a]类型的现有可能为空的列表中
您可以将列表类型构造函数描述为如下定义:
data [] a = [] | a : [] a -- : as an infix operator
data [] a = [] | (:) a ([] a) -- : in prefix positino
这可能更容易理解为
-- [] == List
-- (:) == Cons
data List a = EmptyList | Cons a (List a)
通过递归操作,我假设您的意思是您看到它被用于模式匹配情况,如
head (a:as) = a
这不是唯一的:;模式匹配可以使用任何数据构造函数完成。:是数据构造函数。它将a类型的值前置到[a]类型的现有可能为空的列表中
您可以将列表类型构造函数描述为如下定义:
data [] a = [] | a : [] a -- : as an infix operator
data [] a = [] | (:) a ([] a) -- : in prefix positino
这可能更容易理解为
-- [] == List
-- (:) == Cons
data List a = EmptyList | Cons a (List a)
通过递归操作,我假设您的意思是您看到它被用于模式匹配情况,如
head (a:as) = a
这不是唯一的:;模式匹配可以用任何数据构造函数来完成。它实际上是一个前置,而不是一个附加。这是列表符号。与lambda没有太多关系。使用冗余括号可能会更清楚一些,\x acc->if x<10那么x:acc else acc。它实际上是一个前置词,而不是一个附加词。这是列表符号。与lambda没有太多关系。使用冗余括号,\x acc->如果x<10那么x:acc else acc可能会更清楚一些。