首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法在不创建嵌套列表的情况下使用chunksOf?

有没有办法在不创建嵌套列表的情况下使用chunksOf?
EN

Stack Overflow用户
提问于 2017-09-21 00:05:09
回答 1查看 139关注 0票数 -1

我尝试使用chunksOf函数将一个函数一次映射到当前列表中的两个项目上,例如。

newMerk <- map (\[x, y] -> createNode x y) . chuncksOf 2 $ mrk

假设我们有一个列表x,y,z,d,f,g,h,s,t,q。xy,zd,fg,hs,tq而不是[xy,zd,fg,hs,tq]

EN

回答 1

Stack Overflow用户

发布于 2017-09-21 01:10:47

由于chunksOf能够产生动态大小的块(即,块的大小取决于只有在运行时才知道的Int参数),它必须返回一个列表。常规元组无法工作,因为Haskell中的元组具有固定的静态长度。

对于这个特定的问题,可以使用配对函数而不是chunksOf

pair :: [a] -> [(a, a)]
pair = liftM2 zip odds evens

其中oddsevens分别选取奇数和偶数序数元素。那么你的例子很简单

newMerk <- map (uncurry createNode) (pair mrk)

为了获得额外的乐趣™,您可以尝试按照以下代码编写一个函数:

{-# LANGUAGE DataKinds, TypeFamiles #-}

import Data.Proxy
import GHC.TypeLits

type family Tuple (n :: Nat) a where
    Tuple 1 a = a
    Tuple 2 a = (a, a)
    Tuple 3 a = (a, a, a)
    Tuple 4 a = (a, a, a, a)
    ...

chunksOf :: KnownNat n => Proxy n -> [a] -> [Tuple n a]
chunksOf p xs = ???

但这似乎比它值得的麻烦要多得多。我甚至不确定如何使用当前GHC中提供的依赖类型的工具来实现这样的函数,而且我希望编写一个函数来使用[Tuple n a]也会令人头疼。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46326880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档