【发布时间】:2014-11-07 10:27:45
【问题描述】:
我有一个理论问题,我和一个朋友一直在尝试了解我们如何做到这一点。我们有一个名为palindrome 的函数,它告诉我们字符串是否是回文。以下是我们实现它的方式(可能有更好的方法来实现它,但这就是我们更喜欢它的方式。)
palindrome :: String -> Bool
palindrome = \x -> (== reverse x) x
我们想要做的是remove 我们在这里使用的 Lambda,只使用部分应用程序和高阶函数。我们有几个关于如何做到这一点的想法,但没有一个与我们制作的函数类型相匹配:
palindrome :: String -> Bool
最接近的方法之一是使用组合,但它返回给我们一个函数,它接受两个字符串而不是一个,因为一个用于反向,另一个用于 (==):
palindrome = (==) . reverse
也许,我们忘记了什么,或者我们没有看到什么。您将如何在不使用 Lambda 的情况下使用这两个功能?
【问题讨论】:
-
问题不清楚。你想要一个无积分版本还是
palindrome x = x == reverse x想要? -
我想要一个没有参数的版本,只是使用函数来摆脱我们正在使用的 lambda。到目前为止,所有答案看起来都不错。对不起,如果我的问题不够清楚。
-
@DavidCorrea 以编程方式获得此类缩减的提示(尽管并不总是以可理解的形式)是使用pointfree 工具。只需向它传递一个像
palindrome x = x == reverse x这样的表达式,它就会返回它可以导出的最无点形式。
标签: haskell lambda functional-programming