haskell中lambda函数的应用?
要测试此代码:haskell中lambda函数的应用?,haskell,lambda,quickcheck,Haskell,Lambda,Quickcheck,要测试此代码: -- | this function checks if string or list are a palindrome isPalindrome :: (Eq a) => [a] -> Bool isPalindrome x = if reverse x == x then True else False 我设法写了这样一篇文章: -- | how do I remove ugly p
-- | this function checks if string or list are a palindrome
isPalindrome :: (Eq a) => [a] -> Bool
isPalindrome x =
if reverse x == x
then True
else False
我设法写了这样一篇文章:
-- | how do I remove ugly parentheses our of here?
palindromeTest verb = isPalindrome ((\verb -> verb ++ reverse verb) verb ) == True
where types = verb::String
括号看起来很恶心,我该如何计算它们呢?回文测试
你的表情:
(\verb -> verb ++ reverse verb) verb
没有多大意义:等效表达式为:
(\x -> x ++ reverse x) verb
因为lambda表达式中的动词
是局部作用域。但是你知道什么是x
:它是动词。因此,可以将表达式替换为:
verb ++ reverse verb
或全部:
palindromeTest verb = isPalindrome (verb ++ reverse verb) == True
最后,where types=verb::String
也是无用的:Haskell是静态类型,类型在编译时解析。所以这句话没有添加任何内容。您可以在函数的类型签名中限制动词的类型:
palindromeTest :: String -> Bool
palindromeTest verb = isPalindrome (verb ++ reverse verb)
您可以使用ap
使其更加紧凑:
import Control.Monad(ap)
-- | this function checks if string or list are a palindrome
isPalindrome :: (Eq a) => [a] -> Bool
isPalindrome = ap (==) reverse
import Control.Monad(ap)
--|此函数检查字符串或列表是否为回文
isPalindrome::(等式a)=>[a]->Bool
isPalindrome=ap(=)反向
类型适用于QuickCheck@kaboom:这没关系:quicktest没什么特别的:它也会创建一个Haskell可执行文件,所以它也会通过编译器。werid,根据QuickCheck教程,我觉得它是必需的。无论如何,谢谢@kaboom:你能告诉我这是在教程中写的吗?
-- | this function checks if string or list are a palindrome
isPalindrome :: (Eq a) => [a] -> Bool
isPalindrome x = reverse x == x
import Control.Monad(ap)
-- | this function checks if string or list are a palindrome
isPalindrome :: (Eq a) => [a] -> Bool
isPalindrome = ap (==) reverse