我有以下代码片段:
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/