基本的Haskell:列表理解

亚历克斯

再说一次,我试图遍历客户列表以找到正确的客户,当我找到他们时,我想显示附加到他们的任何非零整数。我不确定如何进行。我知道商店里只会记录1个人的名字。

type Name = String
type Customer = (Name,Int,Int)
type Shop = [Customer]
shop = [cust1, cust2]

cust1 = ("Steve", 321, 123) :: Customer
cust2 = ("John", 0,678) :: Customer

getName :: Customer -> Name
getName (a, b,c) = a

getNumbers :: Customer -> [Int]
getNumbers (a,b,c) = filter (/=0) [b,c] 


rental:: Shop-> Name -> [Int]
rental shop' name' = map getNumbers [ x|x<-shop',getName x == name']
比克利尔

您的答案非常接近。首先,您需要更新getName为3个元组,其次,您应该使用concatMap getNumbers而不是map getNumbers

虽然,看起来您将要向Customer类型中添加新字段,所以我建议您改用记录:

data Customer = Customer
    { custName :: Name
    , custVal1 :: Int  -- I don't know what these are, so use real names
    , custVal2 :: Int
    } deriving (Eq, Show)

现在你可以摆脱getName并做

getNumbers :: Customer -> [Int]
getNumbers c = filter (/= 0) [custVal1 c, custVal2 c]

rental :: Shop -> Name -> [Int]
rental shop' name' = concatMap getNumbers [x | x <- shop', custName x == name']

现在,如果要向中添加另一个字段Customer,则不必更新不依赖于该字段的所有函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基本的haskell:n次复制元素的列表理解

来自分类Dev

基本的haskell:用于将元素复制n次的列表理解

来自分类Dev

Haskell的单子列表理解

来自分类Dev

列表理解递归[Haskell]

来自分类Dev

列表理解Haskell

来自分类Dev

多列表理解Haskell

来自分类Dev

Haskell:列表理解谓词顺序

来自分类Dev

列表理解vs zipWith在Haskell

来自分类Dev

列表理解vs zipWith在Haskell

来自分类Dev

Haskell列表理解和列表Monad

来自分类Dev

如何打破|打破|返回Haskell列表理解

来自分类Dev

为什么Haskell列表理解比循环快

来自分类Dev

[q1,..,qn]的Haskell列表理解

来自分类Dev

Haskell:列表理解是高阶函数吗?

来自分类Dev

列表理解Haskell中的意外并行语句

来自分类Dev

Haskell中任何顺序或维度的列表理解

来自分类Dev

在haskell的列表理解中进行过滤

来自分类Dev

用列表理解计数偶数haskell吗?

来自分类Dev

Haskell列表理解编译错误

来自分类Dev

Haskell - 导致列表理解立即终止

来自分类Dev

创建列表理解时的 Haskell 错误

来自分类Dev

Haskell列表理解-所有列表拆分的列表

来自分类Dev

基本的haskell:如何在列表列表中搜索int

来自分类常见问题

Haskell列表理解,从数字列表中删除整数

来自分类Dev

Haskell列表理解(为列表元素打印sqrt)

来自分类Dev

Haskell列表理解,从数字列表中删除整数

来自分类Dev

基本的Haskell:在多个列表中搜索相同的元素

来自分类Dev

在Haskell中,列表理解的内部工作原理是什么?

来自分类Dev

Haskell-使用列表理解编写zip函数