gpt4 book ai didi

haskell - 如果某个函数为真,则追加到字符串

转载 作者:行者123 更新时间:2023-12-04 06:38:44 24 4
gpt4 key购买 nike

我想创建一个函数,将给定列表中的每个回文作为列表本身打印出来。

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

somefunction :: String -> String
somefunction input = if isPalindrome (input) == True then input else ""

printPalindromes xs = map somefunction (xs)

几乎可以完成工作,但如果我们尝试

*Main> printPalindromes ["anna","peter","aa","bb","cc","efg"]
result -> ["anna","","aa","bb","cc",""]

我们实际想要的结果是这样的:result -> ["anna","aa","bb","cc"]

如您所见,如果给定的输入不是回文,函数 somefunction 只返回 ""。在 somefunction 的 else 情况下我实际上什么都不做?

是否有更好、更紧凑的方式来实现我的目标?

最佳答案

过滤 列表,并删除所有为空列表的元素。您可以使用 null :: [a] -> Bool功能:

filterPalindromes :: [String] -> [String]
filterPalindromes = <b>filter (not . null)</b> . map somefunction

然而,在这里直接使用 isPalindrom 函数可能更有意义,特别是因为如果输入是空字符串,那么这回文:

filterPalindromes :: [String] -> [String]
filterPalindromes = <b>filter isPalindrome</b>

关于haskell - 如果某个函数为真,则追加到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59904471/

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