gpt4 book ai didi

Haskell - 请帮我简化这两个函数

转载 作者:行者123 更新时间:2023-12-03 09:45:54 24 4
gpt4 key购买 nike

我正在尝试完成 Write Yourself a Scheme in 48 Hours 中的练习.我需要帮助来简化几个功能。

data LispVal = Number Integer
| String String
| Bool Bool

isNumber :: [LispVal] -> LispVal
isNumber [] = Bool False
isNumber [(Number _)] = Bool True
isNumber ((Number _):xs) = isNumber xs
isNumber _ = Bool False

isString :: [LispVal] -> LispVal
isString [] = Bool False
isString [(String _)] = Bool True
isString ((String _):xs) = isString xs
isString _ = Bool False
isNumberisString函数有很多共同的结构。我如何去分解出这个共同的结构?

最佳答案

虽然您不能参数化模式匹配本身,但您可以编写自己的小辅助函数,这样您至少不必为每个函数重复列表处理:

isString (String _) = True
isString _ = False

isNumber (Number _) = True
isNumber _ = False

all1 _ [] = False
all1 f xs = all f xs

isListOfStrings = Bool . all1 isString
isListOfNumbers = Bool . all1 isNumber

在我看来,空列表的特殊情况处理在这里不一致。你应该考虑只使用 all相反(这样空列表可以是任何类型的列表,类似于 Haskell 列表的工作方式)。

关于Haskell - 请帮我简化这两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165754/

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