gpt4 book ai didi

haskell - (x :xs) pattern Haskell logic

转载 作者:行者123 更新时间:2023-12-05 08:33:54 25 4
gpt4 key购买 nike

假设有一个简单的函数:

maximum' :: (Ord a) => [a] -> a  
maximum' [] = error "maximum of empty list"
maximum' [x] = x
maximum' (x:xs) = max x (maximum' xs)

我理解这个想法以及 (x:xs) 的作用。正如这里详细解释的那样 What do the parentheses signify in (x:xs) when pattern matching?但是有一件小事我无法忘记。由于cons: 运算符将x 附加到列表xs,为什么当我们使用(x:xs) 时x 是函数参数列表的第一个元素而xs 是尾部??? 就好像 (x:xs) 在参数列表上调用 head 和 tail 一样。

最佳答案

这只是一般模式的一个实例,类型的构造函数既用于构造该类型的元素又用于解构。如果你写了

data MyList a = Empty | Cons a (MyList a)

你会写

maximum' :: (Ord a) => MyList a -> a  
maximum' Empty = error "maximum of empty list"
maximum' (Cons x Empty) = x
maximum' (Cons x xs) = max x (maximum' xs)

除了列表实际上等同于定义

data [a] = [] | a:as

因此,与其他数据类型一样,: 用于构造和解构非空列表。

关于haskell - (x :xs) pattern Haskell logic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278382/

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