haskell + "Remove a parameter"

标签 haskell lambda functional-programming

我有一个理论问题,我和一个 friend 一直在试图了解我们如何才能做到这一点。我们有一个名为palindrome的函数,它告诉我们一个字符串是否是回文。以下是我们的实现方式(可能有更好的方法,但这就是我们更喜欢的方式。)

palindrome :: String -> Bool
palindrome = \x -> (== reverse x) x

我们想要做的是删除我们在这里使用的 Lambda,只使用部分应用程序和高阶函数。我们对如何做到这一点有几种想法,但没有一个与我们创建的函数类型相匹配:

palindrome :: String -> Bool

最接近的方法之一是使用组合,但它返回一个函数,该函数需要两个字符串而不是一个,因为一个用于反向,另一个用于 (==):

palindrome = (==) . reverse

也许,我们忘记了一些事情或者我们没有看到一些事情。如果不使用 Lambda 来使用这两个函数,你会如何做?

最佳答案

您可以使用<*> (->) 的运算符Applicative 的实例.

palindrome = (==) <*> reverse

<*>运算符在某些情况下有点像函数应用程序。在本例中,该上下文是“以 String 作为参数的函数”。所以你得到一个需要 String 的函数并将其传递给两个也采用 String 的函数s,然后将前者的结果应用于后者。换句话说,f <*> g = \x -> f x (g x) .

关于 haskell + "Remove a parameter",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799101/

相关文章:

functional-programming - 在这种情况下如何在 Racket 上订购我的累积变量?

haskell - 是否可以将呈现的案例优化为一个循环?

haskell - 在 Haskell 中使用动态编程? [警告: ProjectEuler 31 solution inside]

bash重装后找不到ghc?

haskell - 如何内省(introspection) Haskell 文件以获取其定义的类型

java - Lambda 和 putIfAbsent

java - 从 lambda 调用默认方法

haskell - 插入持久化

c# - 太多的函数调用

javascript - 如何使用 Ramda 按索引求和 n 数组