gpt4 book ai didi

haskell - 相等的模式匹配

转载 作者:行者123 更新时间:2023-12-05 00:06:22 25 4
gpt4 key购买 nike

parserChar :: Char -> Parser Char
parserChar c = Parser ch where
ch d = case dvChar d of
Parsed c dp -> Parsed c dp
_ -> NoParse

上面的函数应该是一个 Char c并返回一个仅匹配 c 的解析器.函数 dvChar d将返回 Parsed char dpNoParse (其中 char 是字符串中的下一个字符)。因此,我希望 Parsed c dp只会匹配 char==c 的结果,但实际发生的是该函数返回的 Parser 匹配任何字符(即使 c 似乎绑定(bind)到某个特定的字符,作为函数参数)。

以下功能正常工作:
parserChar :: Char -> Parser Char
parserChar c = Parser ch where
ch d = case dvChar d of
Parsed char dp -> if char == c then Parsed char dp else NoParse
_ -> NoParse

手动编码解析器以解析字母 'a'也可以正常工作,因为
case dvChar d of
Parsed 'a' dp -> Parsed 'a' dp
_ -> NoParse

仅当字符为 'a' 时才会返回成功.

那么给了什么?你只能匹配这样的模式中的文字(例如,尽管 Char 在 Eq 类中, if char==c (..) 仍然需要手动编码),还是我做错了什么?

最佳答案

是的,您只能匹配文字。事实上,更好的思考方式是只能匹配构造函数,而 Int、Char、String & co.都有文字构造函数。

请注意,您还可以混合大小写和守卫并将其写为(从内存中):

parserChar :: Char -> Parser Char
parserChar c = Parser ch where
ch d = case dvChar d of
Parsed char dp | char == c -> Parsed char dp
_ -> NoParse

关于haskell - 相等的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285858/

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