【问题标题】:How to extract an element from a tuple in haskell如何从haskell中的元组中提取元素
【发布时间】:2014-10-29 02:06:15
【问题描述】:

我有以下元组:

type Id = Int
type Name = String
type FSK = Int
type Movie = (Id, Name, FSK)

现在我想定义一个从给定列表中提取电影的函数:

extract :: Id -> [Movie] -> (Maybe Movie, [Movie])
extract = .... ?? 

所以当我给出一个 id 和一个电影列表时,它会提取: 1)Nothing +给定的列表,如果找到了id 2) 只需 + 电影,如果找到给定的 id,则没有该电影的新列表,并且电影从列表中删除

示例:

*Main> extract 0 [(1,"Matrix",16),(2,"Gladiator",0)]
(Nothing,[(1,"Matrix",16),(2,"Gladiator",0)])
*Main> extract 1 [(1,"Matrix",16),(2,"Gladiator",0)]
(Just (1,"Matrix",16),[(2,"Gladiator",0)])

我应该如何定义函数?

【问题讨论】:

  • 到目前为止你已经走了多远? .... ?? 不是什么尝试。通常你首先对你拥有的东西进行模式匹配,例如你的[Movie] 列表。
  • 它对[] 有什么作用?它对movie:xs | movie == id 有什么作用?它对任何其他情况有什么作用?

标签: list haskell tuples


【解决方案1】:
extract :: Id -> [Movie] -> (Maybe Movie, [Movie])
extract id []                 = (Nothing, [])
extract id ((fid, n, f):list) | fid == id =  (Just (fid, n, f), list)
                              | otherwise =  (found, (fid, n, f):tail)
                              where (found, tail) = extract id list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多