我有以下代码片段:

palindrome :: String -> Bool
palindrome x = x == reverse x

有什么办法可以以无点样式重写它?

最佳答案

是的,因为任何函数都可以用无点样式编写。在这里,(->) r(又名Reader)的Applicative实例为您完成了此操作,因为

(f <*> g) x = f x (g x)

您可能会从SKI calculus中将其识别为S组合器(顺便说一句,return为K)。

您的回文检查器写为
x == reverse x

以infix形式读取的内容
(==) x (reverse x)

与上面的<*>定义相比,这导致了表达式
isPalindrome x = ((==) <*> reverse) x

您可以在其中放置尾随x以获取解决方案
isPalindrome = (==) <*> reverse

它可能比原始表达式可读性差,因此不应该使用它。无点样式用于可读性,仅在特定情况下有用。

关于haskell - 我将如何以无点样式重写此回文验证器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19349423/

10-11 22:33
查看更多