gpt4 book ai didi

list - 使用默认值压缩而不是删除值?

转载 作者:行者123 更新时间:2023-12-03 15:05:28 25 4
gpt4 key购买 nike

我正在寻找haskell中的一个函数来压缩两个长度可能不同的列表。
我能找到的所有 zip 函数都只是删除一个比另一个更长的列表的所有值。

例如:
在我的练习中,我有两个示例列表。
如果第一个比第二个短,我必须使用 0 填充。否则我必须使用 1。
我不允许使用任何递归。我只需要使用高阶函数。

有什么我可以使用的功能吗?
到目前为止,我真的找不到任何解决方案。

最佳答案

这个问题有一些结构,它来了。我将使用这些东西:

import Control.Applicative
import Data.Traversable
import Data.List

首先,lists-with-padding 是一个有用的概念,所以让我们为它们设置一个类型。
data Padme m = (:-) {padded :: [m], padder :: m} deriving (Show, Eq)

接下来,我记得截断- zip操作产生 Applicative例如,在库中为 newtype ZipList (非 Monad 的一个流行示例)。 Applicative ZipList相当于由无穷大和最小值给出的幺半群的装饰。 Padme具有类似的结构,除了它的底层幺半群是正数(无穷大),使用一和最大值。
instance Applicative Padme where
pure = ([] :-)
(fs :- f) <*> (ss :- s) = zapp fs ss :- f s where
zapp [] ss = map f ss
zapp fs [] = map ($ s) fs
zapp (f : fs) (s : ss) = f s : zapp fs ss

我不得不说出通常的咒语来生成默认 Functor实例。
instance Functor Padme where fmap = (<*>) . pure

如此装备,我们就可以垫远了!例如,接受一个参差不齐的字符串列表并用空格填充它们的函数变成了一个单行。
deggar :: [String] -> [String]
deggar = transpose . padded . traverse (:- ' ')

看?
*Padme> deggar ["om", "mane", "padme", "hum"]
["om ","mane ","padme","hum "]

关于list - 使用默认值压缩而不是删除值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21349408/

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