相关疑难解决方法(0)

什么(f.).在Haskell中意味着什么?

我已经看到很多函数是根据模式定义的(f .) . g.例如:

countWhere = (length .) . filter
duplicate  = (concat .) . replicate
concatMap  = (concat .) . map
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

haskell functional-programming pointfree function-composition tacit-programming

49
推荐指数
2
解决办法
3709
查看次数

作为applicative functors(Haskell/LYAH)

学习Haskell的第11章介绍了以下定义:

instance Applicative ((->) r) where
    pure x = (\_ -> x)
    f <*> g = \x -> f x (g x)
Run Code Online (Sandbox Code Playgroud)

在这里,作者参与了一些不寻常的挥手("<*>的实例实现有点神秘,所以如果我们只是[在没有解释它的情况下显示它的话]它是最好的").我希望这里的某个人可以帮助我搞清楚.

根据应用类定义, (<*>) :: f (a -> b) -> f a -> f b

在实例中,替换((->)r)f:r->(a->b)->(r->a)->(r->b)

所以第一个问题是,我该如何从这种类型中获得f <*> g = \x -> f x (g x)

但即使我认为最后一个公式是理所当然的,我也很难同意我给GHCi的例子.例如:

Prelude Control.Applicative> (pure (+5)) <*> (*3) $ 4
17
Run Code Online (Sandbox Code Playgroud)

这个表达式看起来与之相符f <*> g = \x -> f (g x)(请注意,此版本x之后不会出现f. …

haskell applicative

36
推荐指数
3
解决办法
4017
查看次数

Haskell无点编程

我试图理解Haskell中的无点编程,并且我对一些例子提出了疑问,因为我并不真正理解错误发生时给出的解释.

1)我有一个循环函数定义如下:

myCycle :: [a] -> [a]
myCycle = foldr (++) [] . repeat
Run Code Online (Sandbox Code Playgroud)

为什么不起作用myCycle = foldr (++) [] $ repeat

2)用2添加列表的每个元素,然后添加另一个列表

sum :: [Int] -> [Int] -> [Int]
sum s = zipWith (+) . map (+ 2) $ s
Run Code Online (Sandbox Code Playgroud)

为什么函数有同样的结果sum s = zipWith (+) $ map (+ 2) s?为什么sum l1 l2 = zipWith (+) . map (+ 2) $ l1 $ l2不工作

haskell

0
推荐指数
1
解决办法
150
查看次数