相关疑难解决方法(0)

Haskell美元运算符应用程序

我无法理解函数应用程序如何与haskell中的currying一起工作.如果我有以下功能:

($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

我明白要部分应用这个功能,我需要提供(a -> b)函数($第一个参数).

为什么可以先应用一个值(即反向参数)?

($ 0) :: Num a => (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

haskell operators partial-application dollar-sign operator-sections

11
推荐指数
1
解决办法
1903
查看次数

实际上$功能在haskell中做了什么?

我知道

$ :: (a->b) -> a -> b
f $ x = f x
Run Code Online (Sandbox Code Playgroud)

直觉上,在我看来,比如说,1. $将函数的评估延迟到左边2.评估其右边的结果3.将其左边的结果输入到右边.

这对我来说非常有意义,

ghci> length $ [1..5]
5
ghci> ($) length [1..5]
5
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么,

ghci> ($ [1..5]) length
5
Run Code Online (Sandbox Code Playgroud)

从$的类型来看,是不是它的(第一个)论证应该是一个函数?

syntax haskell operators dollar-sign haskell-prelude

9
推荐指数
3
解决办法
445
查看次数

在闭合的parens里面的美元的符号

Websocket片段有一个声明,在这样的封闭的parens中有美元符号,

any ($ fst client)
Run Code Online (Sandbox Code Playgroud)

因为haskellers使用$sign而不是parens,为什么我们需要parens?

为什么$parens之间有符号?

我试着看看是否$是一个功能

Prelude>:t $
Run Code Online (Sandbox Code Playgroud)

但它抛出了错误, parse error on input $

syntax haskell dollar-sign operator-keyword

5
推荐指数
1
解决办法
278
查看次数

如何理解Haskell中的这个`$`用法

这种情况发生在你想将一堆函数应用于同一个变量的情况下,它可能如下所示:

map (\f->f 4) [odd, even]
Run Code Online (Sandbox Code Playgroud)

但是从LYAH使用$它非常整洁

map ($ 4) [odd, even]
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?首先我在ghci中键入它$ 4 odd,它失败了,然后我打字($ 4) odd,它工作正常.然后我检查($ 4)使用:t哪个显示的类型($ 4) :: Num a => (a -> b) -> b,oddodd :: Integral a => a -> Bool.这似乎有道理,但对我来说仍然不清楚.

任何人都可以清楚地解释它,它是另一种常见用法$,还有其他更多的用法$.

syntax haskell operators dollar-sign operator-sections

2
推荐指数
1
解决办法
296
查看次数

Haskell的$ -Operator的定义

这个职位和其他来源,如这样坚持,$ -运算符的定义

($) :: (a -> b) -> a -> b
f $ x = f x
Run Code Online (Sandbox Code Playgroud)

要么

($) f x = f x
Run Code Online (Sandbox Code Playgroud)

要么

($) = id
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这个定义能够替换括号,所以我试图通过定义:自己重现并检查行为,

k :: (a -> b) -> a -> b
k f x = f x
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

-- these work:
(+2) `k` 4
(+2) `id` 4
sum `k` [1,2]
sum `id` [1,2]
map (flip(-)3) $ filter even `k`  filter (>=0) [-5..10]
map (flip(-)3) $ filter even `id` filter …
Run Code Online (Sandbox Code Playgroud)

haskell definition

2
推荐指数
1
解决办法
87
查看次数

函数elem抛出错误

我的Haskell代码如下

isNotPrime x = elem 0 map (mod x)[3.. (x-1)]    
Run Code Online (Sandbox Code Playgroud)

编译时会显示这些错误

  Couldn't match expected type ‘(t1 -> t1) -> [t1] -> t’
              with actual type ‘Bool’
  The function ‘elem’ is applied to four arguments,
  but its type ‘([a0] -> [b0])
                -> ((a0 -> b0) -> [a0] -> [b0]) -> Bool’
  has only two
  In the expression: elem 0 map (mod x) [3 .. (x - 1)]
  In an equation for ‘prime’:
      prime x = elem 0 map (mod x) [3 …
Run Code Online (Sandbox Code Playgroud)

haskell

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

'$'是haskell中的一个功能吗?

我对haskell的($)感到很困惑.

当我输入

:t ($)
Run Code Online (Sandbox Code Playgroud)

在ghci.我会得到

:($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

但是,当我输入

:t ($ 3)
Run Code Online (Sandbox Code Playgroud)

我会得到

($ 3) :: Num a => (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)

那么,为什么($)接受第二个参数没有任何错误?

syntax haskell dollar-sign

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

命名函数($)或(>> =)

什么是开始($)(>>=)应该做的功能.我不是要问究竟是什么$>>=意思,但我明白这一点

f :: Int -> Int
f x = x+2
Run Code Online (Sandbox Code Playgroud)

是一个取整数并添加两个的函数,但在学习Haskell的过程中我遇到的问题是解决方案如下所示:

($) :: (a -> b) -> (a -> b)
f $ x = f x
Run Code Online (Sandbox Code Playgroud)

来自Haskell的$ mean/do是什么?

我假设这意味着函数($)采用lambda(a - > b)并输出lambda(a - > b),然后下一行我不确定.

但我总是假设功能定义

f :: Int -> Int
Run Code Online (Sandbox Code Playgroud)

必须跟一个带有以f开头的参数的函数,就像我的第一个代码示例一样.

谢谢

haskell

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