Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell lambda函数中的冒号?_Haskell_Lambda - Fatal编程技术网

Haskell 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

我不理解冒号在以下lambda表达式中的作用:

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可能会更清楚一些。