gpt4 book ai didi

scala - 是否可以像在 Haskell 中一样在 Scala 中实现翻转?

转载 作者:行者123 更新时间:2023-12-04 17:00:14 25 4
gpt4 key购买 nike

是否可以像在 Haskell 中一样在 Scala 中实现翻转?

http://hackage.haskell.org/package/base-4.7.0.1/docs/src/GHC-Base.html#flip

flip                    :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x

最佳答案

嗯,这是一个相当直白的翻译:

def flip[A, B, C](f: A => B => C)(x: B)(y: A) = f(y)(x)

现在您可以编写以下内容:
scala> def append: String => String => String = a => a + _
append: String => (String => String)

scala> append("foo")("bar")
res0: String = foobar

scala> val flipped = flip(append) _
flipped: String => (String => String) = <function1>

scala> flipped("foo")("bar")
res1: String = barfoo

您可能会争辩说以下内容更接近 Haskell 版本的精神:
def flip[A, B, C](f: A => B => C): B => A => C = x => y => f(y)(x)

现在您不必对部分应用的方法进行 eta-expand:
scala> val flipped = flip(append)
flipped: String => (String => String) = <function1>

scala> flipped("foo")("bar")
res2: String = barfoo

所以你有几个选择。不清楚是否更像 Haskell 实现,但考虑到 Scala 对方法和函数的区别,它们非常接近。

关于scala - 是否可以像在 Haskell 中一样在 Scala 中实现翻转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25349543/

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