相关疑难解决方法(0)

有什么区别.(点)和$(美元符号)?

(.)和美元符号有($)什么区别?据我了解,它们都是不需要使用括号的语法糖.

syntax haskell function-composition

682
推荐指数
10
解决办法
15万
查看次数

Haskell函数组合(.)和函数应用程序($)成语:正确使用

我一直在阅读真实世界的哈斯克尔,我即将结束,但风格问题一直在与我(.)($)操作员徘徊.

当你编写一个由其他函数组成的函数时,你可以这样写:

f = g . h
Run Code Online (Sandbox Code Playgroud)

但是当你在这些函数的末尾应用某些东西时,我会这样写:

k = a $ b $ c $ value
Run Code Online (Sandbox Code Playgroud)

但是这本书会像这样写:

k = a . b . c $ value
Run Code Online (Sandbox Code Playgroud)

现在,对我来说,他们看起来功能相同,他们在我眼中完全一样.然而,我看的越多,我就越看到人们以书的方式编写他们的函数:(.)首先构成,然后仅在最后使用($)附加值来评估该批次(没有人用很多美元组成) .

是否有理由使用比使用所有($)符号更好的书籍方式?或者这里有一些我没有得到的最​​佳实践?或者它是多余的,我根本不应该担心它?

haskell coding-style function-composition

124
推荐指数
5
解决办法
2万
查看次数

Haskell中的const函数

该功能const在Prelude中定义为:

const x _ = x
Run Code Online (Sandbox Code Playgroud)

在GHCi,当我尝试

Prelude> const 6 5  -> Gives 6
Run Code Online (Sandbox Code Playgroud)

但是当我尝试的时候

Prelude> const id 6 5 -> Gives 5
Run Code Online (Sandbox Code Playgroud)

即使在做出改变之后

Prelude> (const id 6) 5 -> Gives 5
Run Code Online (Sandbox Code Playgroud)

这个函数不应该给出函数6的输出idid :: a -> a应该绑定的类型

Prelude> (const 6) 5 -> Gives 6
Run Code Online (Sandbox Code Playgroud)

为什么函数const表现不同?

haskell

26
推荐指数
3
解决办法
6438
查看次数

组成功能组合:(.).(.)如何工作?

(.)采用两个函数,它们接受一个值并返回一个值:

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

既然(.)两个参数,我觉得(.).(.)应该是无效的,但它完全没问题:

(.).(.) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我意识到这个问题措辞严厉......所有的功能都只是因为讨论而采取了一个论点.也许更好的方式来说它是类型不匹配.

haskell currying pointfree

25
推荐指数
4
解决办法
1934
查看次数

curry如何工作?

我对Haskell和FP很新.我已经阅读了许多描述currying的文章,但我还没有找到它如何实际工作的解释.

这里是一个功能:(+) :: a -> (a -> a) 如果我这样做(+) 4 7,该函数将4返回一个函数,7并返回11.但是会发生什么4?第一个功能是做什么用的4?怎么(a -> a)7

当我考虑更复杂的功能时,事情变得更加混乱:

max' :: Int -> (Int -> Int)
max' m n | m > n = m
         | otherwise = n
Run Code Online (Sandbox Code Playgroud)

什么(Int -> Int)比较它的参数?它只需要一个参数,但它需要两个参数m > n.

haskell currying

13
推荐指数
3
解决办法
5463
查看次数

uncurry($)有什么作用?

我正在做一些练习,我必须添加一个函数的类型并解释它的作用.我坚持这个:

phy = uncurry ($)
Run Code Online (Sandbox Code Playgroud)

据GHCi说,这种类型phy :: (a -> b, a) -> b.我的haskell知识是基本的,所以我真的不知道它的作用.

haskell functional-programming currying

13
推荐指数
3
解决办法
3107
查看次数

无点风格并使用$

如何结合使用$和无点风格?

一个明显的例子是以下效用函数:

times :: Int -> [a] -> [a]
times n xs = concat $ replicate n xs  
Run Code Online (Sandbox Code Playgroud)

只是写入concat $ replicate产生错误,类似的是你不能写concat . replicate,因为concat期望值而不是函数.

那么你如何将上述功能转变为无点风格呢?

haskell pointfree

10
推荐指数
3
解决办法
578
查看次数

这个haskell表达式是如何评估的

我正在学习haskell,我遇到了这个我无法理解的表达方式.

(flip const 1 . const flip 3 const 4) 5
Run Code Online (Sandbox Code Playgroud)

最终的结果是5,但我不知道它是如何评估的.

haskell

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

元组和功能组成

是否有更好的方式来表达(\(a, b) -> a < b)功能组合?我觉得我错过了一些东西,curry只是试着让我更加困惑.

haskell tuples function-composition

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