haskell如何从此代码中删除列表用法?
发布时间:2020-12-15 04:29:45 所属栏目:Java 来源:网络整理
导读:我正在努力学习 Haskell并努力学习二进制IO. 此代码根据 this answer中给出的代码改编为我之前的一个问题. 我试图从给定的文件中读取很多Word32值和一些Word8值(元数据).目前,我编写了一个程序,只将文件中的Word32值读入未装箱的矢量. 此代码的问题是它在从
我正在努力学习
Haskell并努力学习二进制IO.
此代码根据 this answer中给出的代码改编为我之前的一个问题. 我试图从给定的文件中读取很多Word32值和一些Word8值(元数据).目前,我编写了一个程序,只将文件中的Word32值读入未装箱的矢量. 此代码的问题是它在从文件中读取多个Word32值时使用列表(通过replicateM).我想摆脱中间列表(出于效率原因),并希望使用ByteString直接在文件的向量中读取数据. 这是我完整的工作代码. import Data.Word import qualified Data.ByteString.Lazy as BIN import Data.Binary.Get import Data.Binary.Put import qualified Data.Vector.Unboxed as V import Control.Monad import System.IO main = do h_in <- openFile "dat.bin" ReadMode v <- readInVector 10 h_in putStrLn (show v) hClose h_in readInVector n h_in = do bin1 <- BIN.hGet h_in (n*100) let ints1 = runGet (replicateM n getWord32le) bin1 let v = V.fromList (ints1) :: V.Vector Word32 return v 这该怎么做?我希望一个完整的工作代码作为答案,而不仅仅是指向Haskell网站上的文档的指针,该网站有很多文本,几乎没有工作示例. 解决方法
vector-package有自己的
replicateM 函数用于向量,您可以使用它直接初始化向量而无需构建中间列表.
readInVector n h_in = do bin1 <- BIN.hGet h_in (n*100) return $runGet (V.replicateM n getWord32le) bin1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – Liquibase试图应用所有变更集,即使数据库存在
- Java Statement.addBath()方法:添加批处理语句
- Kettle启动转换任务的时候报错:No suitable driver found
- java – 使用Web应用程序上下文的Spring上下文层次结构
- java – 在Wicket 1.5(.2)中没有在url上重新加载的组件?
- 文档 – 在JavaFX中获取节点的全局坐标
- java – 使用SAML的REST API身份验证
- Java 8中的功能接口
- java – JPA,HIBERNATE.如何从@TableGenerator获取下一个值
- 深入了解数据校验:Java Bean Validation 2.0