【发布时间】:2017-08-28 23:23:37
【问题描述】:
以函数式思维方式思考时,鉴于函数应该是纯函数,因此可以得出结论,任何没有参数的函数基本上只是一个值。
然而,现实阻碍了它,并且使用不同的输入,我可能不需要某个函数,如果该函数的计算量很大,如果不需要,我不想评估它。
我找到了一种解决方法,使用 let func _ = ... 并使用 func 1 或其他方式调用它,但这对读者来说感觉非常不习惯且令人困惑。
这归结为一个问题:在 F# 中,是否有一种适当的方法来声明一个具有零参数的函数,而无需在声明时对其进行评估?
【问题讨论】:
-
人们也可能会认为值是“基本上没有参数的函数”,这就是 Haskell 看待事物的方式。我想知道为什么 F# 在这方面有所不同。
-
@self 这是因为 Haskell 默认也是惰性的;除非程序员明确要求,否则不会在声明时评估任何值,包括函数。 F# 中的语义默认是严格的,应该以不同的方式表示。
-
在 Haskell 中,纯函数实际上是纯函数。 F# 中“现实阻碍”的唯一原因是 F# 函数不能保证是纯函数。任何东西是否懒惰都没有关系。在 Haskell 中,无参数函数只能返回一个值。 @jpaugh
-
我应该补充一点,Haskell 中的所有函数都是纯函数。我之前的评论听起来像是有纯函数和非纯函数。一切都是纯净的。
标签: f# functional-programming unit-type