文本文件数据库:第2部分

2010年10月22日

上一次练习我们开发了四个功能,用于从各种类型的文本文件数据库读取记录。在今天的练习中,我们开发了四个用于处理这些记录的函数,包括map、fold、filter和for-each。我们还在上一次练习,这给了我们第五个处理函数。

所有四个函数都将其作为第一个参数a读者从输入中获取下一条记录的函数;我们在上一个练习中编写了一些阅读器函数,通常为特定的输入格式编写其他函数。Map同时使用读取器函数和转换器函数,并将转换器应用于每个输入记录,以与输入相同的顺序返回转换后的值的列表。Fold采用一个读取器函数、一个组合函数和一个基值,并将组合器依次应用于每个基值和输入中的下一条记录,当输入耗尽时返回最终的基值。滤波器是一个组合器;它接受一个reader函数和一个谓词,并返回一个新的reader函数,该函数只传递谓词为true的那些输入记录。For-each采用一个读取器函数和另一个过程,并依次将该过程应用于每个输入记录,仅用于其副作用,直到输入耗尽;它什么也不回。

您的任务是编写处理文本文件数据库记录的四个函数。当你完成后,欢迎你阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

2对“文本文件数据库:第2部分”的回应

  1. […]实践–文本文件数据库:第2部分Remco Niemeijer在今天的编程实践练习中,我们的任务是定义在[…]上映射、过滤、折叠和转发的函数

  2. 雷姆科·尼梅耶

    当我在争论时http://bonsaicode.wordpress.com/2010/10/22/programming-praxis-text-file-databases-part-2/这四个值得在Haskell中实现的选项中,只有foreach一个,因为将其他选项限制在文本数据库中会损失更多的便利。因此,下面的代码示例仅显示foreach(也称为mapM_)的定义以及如何将常规列表处理函数应用于数据库记录。

    dbMapM_::单数m=>(a->mb)->任意l[a]->m()dbMapM_=其中之一(const$return())。地图M_主::IO()main=do数据库<-readDB(固定长度[5,3,4])“db_fl.txt”打印$map头<$>db打印$foldl(const.suck)0<$>db打印$filter(奇数长度)<$>dbdbMapM_打印数据库

留下评论