gpt4 book ai didi

function - Haskell,如何检查回文数

转载 作者:行者123 更新时间:2023-12-02 21:36:09 25 4
gpt4 key购买 nike

我有一个小问题。即使字符是否为大写字母,我如何扩展函数以返回 True

我的函数适用于列表中的字符串:

f1 w = w == reverse w

Test:
*Main> let test = ["Boob"]
*Main> f1 test
True

*Main> let test2 = "Boob"
*Main> f1 test2
False

问候,

马丁

最佳答案

怎么样

import Data.Char (toLower)

f1 :: String -> Bool
f1 w = w == reverse w

f2 :: String -> Bool
f2 str = f1 $ map toLower str

但我建议为你的函数使用好的名称

testPalindrome = f1
ignoreCase = map toLower

然后

testPalindrome' = testPalindrome . ignoreCase

更新:

.是函数的串联:

(.) :: (b -> c) -> (a -> b) -> (a -> c)
(g . f) x = g (f x)


f
A -----> B
\ |
\ |
g.f \ |g
\ |
V V
C

更新2

@dfeuer 在评论中提到了一个非常优雅的解决方案

import Data.Function (on)
import Data.Char (toLower)

(=~=) :: String -> String -> Bool
-- | Equivalence of Strings, by ignoring the case
(=~=) = (==) `on` toLower

testPalindrome :: String -> Bool
testPalindrome w = w =~= reverse w

函数on (使用带反引号语法的中缀)采用函数 (==)和“修饰函数”toLower并将其应用于该函数的参数。

(f `on` g) x y = f (g x) (g y)

这对于像 (==) 这样的二元运算符特别有用。 , (<)等等。

关于function - Haskell,如何检查回文数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com