gpt4 book ai didi

向量上的 Haskell 模式匹配

转载 作者:行者123 更新时间:2023-12-04 22:29:25 24 4
gpt4 key购买 nike

是否可以在向量上使用列表样式模式匹配?

IE

import qualified Data.Vector as V

f :: V.Vector a -> a
f (x:xs) = x

给出错误

最佳答案

-XViewPatterns可以让你这样做:

{-# LANGUAGE ViewPatterns #-}
module VecViewPats where

import Data.Vector (Vector)
import qualified Data.Vector as V

uncons :: Vector a -> Maybe (a, Vector a)
uncons v = if V.null v
then Nothing
else Just (V.unsafeHead v, V.unsafeTail v)

vsum :: Num a => Vector a -> a
vsum (uncons -> Just (a,av)) = a + vsum av
vsum (uncons -> Nothing) = 0

-XLambdaCase
import Control.Category ((>>>))
-- ...
vsum :: Num a => Vector a -> a
vsum = uncons >>> \case
Just (a,av) -> a + vsum av
Nothing -> 0

但老实说,当您使用一个数据结构( Vector )作为另一个数据结构( [] )时,这似乎有点代码味道,这表明您选择的数据结构可能已关闭。

如果你真的只是为了某种算法的目的而想把它当作一个列表,为什么不使用 toList ?

关于向量上的 Haskell 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36993937/

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