8得票3回答
函数应用:为什么这里要使用$符号?

前段时间,我在Stack Overflow上问了一个关于$符号的问题,得到了很有用的答案--事实上,我认为我已经理解如何使用它。 但是似乎我错了:( 这个例子出现在教程中: instance Monad [] where xs >>= f = concat . map ...

8得票2回答
这是 JavaScript 中函数式镜头的位置吗?

我正在玩耍使用无参数风格的JavaScript,只是为了好玩。 假设我正在编写视频游戏Diablo,并且正在使用类似以下但更深层次和更复杂的嵌套类型来建模敌人: { name: "badguy1", stats: { health: 10: strength: 42 }, pos: {x:...

21得票7回答
Haskell中的map/zip与列表推导式比较

你最可能写哪种代码?r = zip xs $ map sqrt xs 或者r = [(x, sqrt x) | x <- xs] 互联网上的示例代码似乎表明前者更常见且更受欢迎。

15得票2回答
Haskell中的参数数量和无参函数

即使使用点除法,多个模式匹配也不可能具有不同数量的参数!foo True b = b + 2 foo _ = id 举例来说,它不能正常工作。但是foo True = (+2) foo _ = id 有时我们只能在函数的某一部分中使用无点风格(point-free),为什么呢?这是 GHC 处...

13得票3回答
这个函数能以“点无形式”写出吗?如果不能,为什么?

一个相关的问题是这个,但是有些回答说几乎任何东西都可以变成无点函数,那么这个函数有什么问题?\[x] -> x http://pointfree.io/似乎不能用点分式风格写。这是意味着它无法以那种方式书写吗?如果是这样,那么理论上的原因是什么?我只能观察到上面的函数是head(或las...

10得票5回答
无参风格和使用$符号

如何将$和点自由样式结合起来使用? 下面是一个清晰的实用函数示例:times :: Int -> [a] -> [a] times n xs = concat $ replicate n xs 只是编写concat $ replicate会产生错误,同样你也不能编写conca...

11得票2回答
将数字函数作为Num的实例?

我希望能够在Haskell中使用二进制运算符组合数字函数。因此,例如,对于一元数字函数:f*g 应该翻译为:\x -> (f x)*(g x) 同样地,加法也可以这样做。制作自己的运算符相当简单,但我真的很想将 Num a => a -> a 函数实例化为 Num,但我不确定...

14得票2回答
为什么这个函数的pointfree版本看起来是这样的?

我一直在玩弄Haskell,包括练习以无参形式编写函数。这里是一个示例函数:dotProduct :: (Num a) => [a] -> [a] -> a dotProduct xs ys = sum (zipWith (*) xs ys) 我想以点语法的形式编写这个函数。...

60得票6回答
Haskell函数组合运算符的类型为(c→d) → (a→b→c) → (a→b→d)。

普通函数组合的类型为(.) :: (b -> c) -> (a -> b) -> a -> c 我认为这应该适用于类似以下类型:(.) :: (c -> d) -> (a -> b -> c) -> a -> b -> d...

11得票2回答
`ap zip tail`表达式是如何工作的?

我在想如何将f x = zip x (tail x)改写成点-free形式。于是我使用了pointfree程序,得到的结果是f = ap zip tail,其中ap是Control.Monad中的函数。我不理解这个点-free定义是如何工作的。如果可以从类型的角度理解它,我希望我能理解它。im...