作为一个Haskell新手,我不明白为什么表达式是head。单词“一二三四”
抛出异常和函数组合头。words
必须与$
运算符一起应用-它右边的表达式不需要进一步计算,因为它只是一个字符串
。编译它的另一种方法是将head。单词
在括号中,但是(head.words)::string->String
与head类型相同。words::string->String
,那么为什么把它放在括号中可以编译表达式呢?
因为优先规则。申请优先;$
-最低。
<代码>头部。单词“一二三四”被解析为head。(单词“一二三四”)
即应用于字符串的单词
必须生成一个函数(正如(.)
所要求的那样)。但这不是words
所具有的类型:
Prelude> :t words
words :: String -> [String]
<代码>头部。另一方面,words$“One two three Four”被解析为(head.words)“One two three Four”
,类型适合。
在JavaScript中,该代码如下所示: 正如您所看到的,函数组合与JavaScript中的链接方法非常相似。我真的很喜欢链接方法从左到右读取的方式。在Haskell中,我可以使用中的函数和反向函数应用程序执行类似的操作,如下所示: 现在我想用点自由样式来写这个函数。使用函数组合,我将把它写如下: 函数组合的美妙之处在于它可以与自身组合,形成如上所示的“高阶函数组合”。因此,尽管它的类型签名直观
我们从右到左都知道并爱/恨作文: 什么是自然/从左到右组合的“最标准”操作符(如在某种公共库中):
函数组合是将一个函数的输出用作另一个函数的输入的过程。在数学中,合成用表示,其中是一个函数,其输出用作另一个函数(即)的输入。 如果一个函数的输出类型与第二个函数的输入类型匹配,则可以使用这两个函数来实现函数组合。我们使用点运算符()在Haskell中实现函数组合。 看下面的示例代码。演示如何使用函数组合来计算输入数字是偶数还是奇数。 在这里,在函数中,同时调用了两个函数和。编译器将首先以作为参数
; ; ; 在2.中,设3。;因此,应为,,替换为1。,为,应为 但是,应该彼此相等,?如何使两者在GHCi中相互适应,它似乎用或代替了,那么它是如何前进的呢?
我试图通过Haskell理解函数式编程,但我在处理函数组合时遇到了很多麻烦。 我所理解的是: Haskell使用只有一个arg的函数,因此我们在每次函数执行后返回一个新函数来执行。 因此,第一个是param类型,而第二个是必须添加第二个数字的生成函数的返回类型。 我不知道我做错了什么。 你能帮我更多地理解这个错误吗,这样我就可以找到解决方案了?
我用递归函数在Haskell中实现一些数论函数的幂运算。我正在使用QuickCheck库来测试我的实现。为了简化我的测试,我使用了基库中的Natural数据类型,在quickcheck-instances库中定义的Natural任意实例,以及以下从Nat转换到Natural和从Natural转换到Nat的函数,考虑的是我自己定义的数据Nat: 在自然数上使用以下递归: 我的幂函数是