我刚刚开始使用 F#,看看如何使用柯里化将第一个参数预加载到函数中。但是如何使用第二个、第三个或任何其他参数来做到这一点呢?命名参数会让这变得更容易吗?是否有任何其他函数式语言具有命名参数或其他方式使柯里化与参数顺序无关?
通常你只使用 lambda:
fun x y z -> f x y 42
是一个类似于“f”的函数,但第三个参数绑定为 42。
您还可以使用组合器(就像有人在评论中提到 Haskell 的“翻转”),它可以重新排序参数,但我有时发现这令人困惑。
请注意,大多数柯里化函数都是这样编写的,即最有可能部分应用的参数排在第一位。
F# 为方法提供了命名参数(不是 let 绑定的函数值),但这些名称适用于“元组”参数。命名的柯里化参数没有多大意义;如果我有一个两个参数的柯里化函数“f”,我希望给定
let g = f
let h x y = f x y
那么“g”或“h”可以替代“f”,但“命名”参数使得这不一定成立。也就是说,“命名参数”与语言设计的其他方面的交互效果很差,而且我个人不知道有什么好的设计可以让“命名参数”与“第一类柯里化函数值”交互良好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)