gpt4 book ai didi

haskell - @(_ :_), 它在模式匹配中是如何工作的

转载 作者:行者123 更新时间:2023-12-03 13:36:39 24 4
gpt4 key购买 nike

这是取自 o' reilly - real world haskell 的示例.

maybeReview alist = do
title <- lookup1 "title" alist
return (MovieReview title)'

lookup1 key alist = case lookup key alist of
Just (Just s@(_:_)) -> Just s
_ -> Nothing
@ 如何符号在这里工作,
Just (Just s@(_:_)) -> Just s

它如何匹配非空值?

最佳答案

_是通配符。它说确保这里有一个值,但我不想将它绑定(bind)到任何变量。 :是列表的构造函数。左边是一个值,右边是列表的其余部分。列表的其余部分可以为空。因此,如果您执行以下操作:

(x:xs)

x 是列表的第一个元素,xs 可以是一个空列表,也可以是无限数量的元素。
(x:y:xs)

只会匹配至少有 2 个元素的列表。 @是 at 模式。它将整个右表达式绑定(bind)到左变量。
m@(Just _)

这里 m将具有类型 Maybe a . _只是因为 Just 被使用是 a -> Maybe a 类型我们需要为其参数设置一个占位符。所以 m绑定(bind)到 (Just _) 的整个值。在你的例子中。
s@(_:_)
s是整个列表。和 (_:_)指定列表必须至少有一个元素,否则匹配将失败。如果我们写:
s@(x:xs)
x将是第一个元素和 xs将是列表的尾部。 s == x:xs将返回 True .但是由于我们不需要头部或尾部,我们只需使用 _ .

关于haskell - @(_ :_), 它在模式匹配中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31421237/

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