gpt4 book ai didi

haskell - 函数内的格式化语句 - 规则?

转载 作者:行者123 更新时间:2023-12-02 17:05:38 36 4
gpt4 key购买 nike

考虑:

myFunction :: (Eq a) => a -> a -> [a]
myFunction v1 v2 = statement_1.. $ statement_2... $ statement_3...

对比

myFunction :: (Eq a) => a -> a -> [a]
myFunction v1 v2 = statement_1 result_1 result_2
where
result_2 = statement_2
result_3 = statement_3

Haskell 中是否有关于首选哪种格式的经验法则?对于何时使用每个版本有任何具体规则吗?

最佳答案

首先,这些实际上并不等同。 f $ x $ y 被解析为 f $ (x $ y) (因为 infixr 0 $),因此您实际上需要将第一个版本写为

myFunction v1 v2 = (statement_1.. $ statement_2...) $ statement_3...

或者,如果 statement_1 实际上只是一个符号,我实际上更喜欢

myFunction v1 v2 = statement_1 (statement_2...) (statement_3...)

确实,您的问题是为这些中间结果指定自己的名称是否有意义。嗯,这个问题与 Haskell 没有什么关系——它适用于大多数编程语言,尽管很少有语言能够像 Haskell 一样在单个表达式中编写如此多的内容。只能回答为:如果可以让代码更容易理解的话,给它们起个名字。也许很难看出 statement_2 ... 的用途是什么,但是“单个词注释”就能澄清它吗?好吧,那就给它起个名字吧!如果它只是一个简短的表达并且它的含义很清楚,我就不会打扰。

请注意,在某些情况下,无论您是否将某些内容定义为命名实体,都可能会影响性能(甚至复杂性)。例如,如果 result_1 是一个不依赖于 v2 的冗长计算,则这样编写是有意义的:

myFunction v1 = \v2 -> statement_1 result_1 $ statement_3..
where result_1 = statement_2

这允许您将函数部分应用到 v1 参数,从而分担通过 v2 进行多次调用的大量计算工作,例如与 map (myFunction v1₀) listOfV2s

关于haskell - 函数内的格式化语句 - 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40147128/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com