Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Haskell中建模记录存储_Haskell_Haskell Platform - Fatal编程技术网

如何在Haskell中建模记录存储

如何在Haskell中建模记录存储,haskell,haskell-platform,Haskell,Haskell Platform,我想在Haskell建立一个唱片店的模型。实际上销售记录并不重要,我主要想关注的是如何建立库存管理模型和跟踪销售。我的问题描述如下: 记录艺术家姓名和曲目标题下的单曲销售 返回给定艺术家姓名和曲目标题的曲目总销量。 (如果没有匹配的曲目,则应返回0。) 从销售记录中删除给定艺术家姓名和曲目标题的曲目 如何开始?因此,首先,您可以查看问题描述,突出显示构成问题域的名词和动词:销售、跟踪、跟踪标题、艺术家、销售数量、销售记录。然后,我可能会首先为最核心的概念定义一种数据类型: 导入数据。文本(Tex

我想在Haskell建立一个唱片店的模型。实际上销售记录并不重要,我主要想关注的是如何建立库存管理模型和跟踪销售。我的问题描述如下:

  • 记录艺术家姓名和曲目标题下的单曲销售
  • 返回给定艺术家姓名和曲目标题的曲目总销量。
    (如果没有匹配的曲目,则应返回0。)
  • 从销售记录中删除给定艺术家姓名和曲目标题的曲目

  • 如何开始?

    因此,首先,您可以查看问题描述,突出显示构成问题域的名词和动词:销售、跟踪、跟踪标题、艺术家、销售数量、销售记录。然后,我可能会首先为最核心的概念定义一种数据类型:

    导入数据。文本(Text)
    类型标题=文本
    类型艺术家=文本
    数据轨道=轨道
    {trackTitle::Title
    ,轨迹艺术家::艺术家
    }推导(Eq、Ord、Show)
    最佳跟踪,好跟踪::跟踪
    最佳跟踪
    {trackTitle=“这就是我的生活”
    ,trackArtist=“jon bovi”
    }
    okayTrack=轨道
    {trackTitle=“住在普雷耶”
    ,trackArtist=“jon bovi”
    }
    
    您也可以用大致相同的方式定义销售

    也许你想用这个软件包来模拟价格

    进口货币
    类型价格=密集“美元”
    数据销售=销售
    {saleTrack::Track
    ,salePrice::价格
    }
    销售::[销售]
    销售=
    [Sale{saleTrack=bestTrack,salePrice=399%100}
    ,Sale{saleTrack=okayTrack,salePrice=284%100}
    ]
    
    这些是名词。动词“添加/删除销售记录”可以制成函数。如果销售是一个列表,则添加和删除销售记录将成为对列表进行操作的递归函数:

    addSale::Track->Price->[Sale]->[Sale]
    addSale soldTrack soldPrice existingSales=。。。
    removeSale::Title->[销售]->[销售]
    removeSale标题existingSales=。。。
    
    在编写这些函数的过程中,您还可以通过制定有关它们的属性来测试它们:例如:将销售添加到现有的销售列表中,生成的列表应该比现有的销售列表大一倍。从空销售列表中删除销售应该产生错误,或者复制空销售列表(decise)。从非空的销售列表中删除销售应生成一个少一个销售的列表。从包含相同曲目标题的销售列表中删除两次销售只应删除其中一个(哪个?决定)。添加和删除一个曲目应产生与添加之前相同的销售列表

    从这些属性可以构造单元测试或属性测试


    当你为商店之类的东西建模时,你也可以深入到好的实践中去,例如,记录同一物品的不同价格可能是不好的,因此你可能想发明一个产品代码。为一家商店做好建模是一个兔子洞,因此如果你只是想做一个愚蠢的概念证明来覆盖最可能的领域,比如最终达到一个UI,那么这部分可能并不重要。

    当你问有关StackOverflow的问题时:跳过“我知道的不多”,确保你内联了实际的问题描述;链接到图像有两个问题:一个问题是搜索引擎无法轻松扫描图像,因此其他人无法找到您的问题。另一个问题是,如果外部图像最终丢失,这篇文章将失去所有意义,因为问题的主体除了断开的链接之外,没有任何描述。最后,经修订的问题仍然没有任何尝试。因此,也许你可以将“我该如何开始”改为“我已经尝试过了”:)考虑使用列表来存储当前的销售记录。列表中的每个元素都有艺术家、曲目名称和销售编号。1.将更新列表中的元素,2。将在元素与艺术家名称3匹配时返回值。将从列表中删除元素