我很难解析mf
m
y
如何分配值,甚至为什么在where
部分的分配左侧可能有3个变量。< / p>
问:有人可以解释两种情况下会发生什么吗?(即空列表和包含某些元素的列表)
-- | A variant of 'foldl' that has no base case,
-- and thus may only be applied to non-empty structures.
--
-- @'foldl1' f = 'List.foldl1' f . 'toList'@
foldl1 :: (a -> a -> a) -> t a -> a
foldl1 f xs = fromMaybe (errorWithoutStackTrace "foldl1: empty structure")
(foldl mf Nothing xs)
where
mf m y = Just (case m of
Nothing -> y
Just x -> f x y)
答案 0 :(得分:7)
$field = $this->User->find(
'all', array(
'conditions'=>array(
'User.specialist_id' => $arrayOfSpecialistIds,
'User.role'=>'careproviderRole',
'User.gender'=>$this->request->data['gender'])
)
子句中的定义遵循与全局定义相同的语法,因此where
定义了一个名为mf m y = ...
的函数,该函数采用名为mf
和m
的参数
答案 1 :(得分:4)
我很难解析为mf m y分配的值,甚至为什么可以有3个变量。
这里没有定义三个变量:定义变量mf
这是一个函数,m
和y
是函数的两个参数 mf
。
我们可以使功能更优雅,从而省略m
和y
。 mf
可以定义为:
mf Nothing = Just . id
mf (Just x) = Just . f x
请注意,我们不能简单地将mf
作为外部函数,因为它使用函数f
,其参数为foldl1
。所以我们把它放在where
子句中:
foldl1 :: (a -> a -> a) -> t a -> a
foldl1 f xs = fromMaybe (errorWithoutStackTrace "foldl1: empty structure")
(foldl mf Nothing xs)
where mf Nothing = Just . id
mf (Just x) = Just . f x
答案 2 :(得分:2)
在空列表案例中,foldl mf Nothing [] ~ Nothing
按定义,foldl1
将返回"empty structure"
错误。
当xs
不为空时,foldl1'
只是foldl
的左侧折叠。在这种情况下,foldl
的类型为
foldl :: (Maybe a -> a -> Maybe a) -> Maybe a -> [a] -> Maybe a
使用mf :: Maybe a -> a -> Maybe a
子句中定义的组合函数where
。