Haskell-迭代具有不同功能的元组

时间:2018-11-23 17:00:27

标签: haskell

我一直在尝试对cand数据进行迭代,以应用函数“ pt_string”。

Pt :: (Float, Float)
Person :: (Pt, Pt, [Pt], Float)

我的想法是为tupple的每个元素以不同的方式调用该函数“ pt_string”。

例如:

  1. pt_string Point(第一)
  2. 映射pt_string [Point]
  3. pt_string Point(第二个)
  4. 显示“ Tmp”

到目前为止,我得到了:

pt_string :: pt -> String
pt_string pt =  "(" ++ show (fst pt) ++ "," ++ show (snd pt) ++ ")\n"

哪个工作正常。但是如何按上述顺序创建 cand_to_string :: cand->字符串

谢谢!

1 个答案:

答案 0 :(得分:1)

假设

type Candidate = (Point, Point, [Point], Float)

您可以使用

candidate_to_string :: Candidate -> String
candidate_to_string (p1, p2, ps, f) =
   "(" ++
   point_to_string p1 ++ ", " ++
   point_to_string p2 ++ ", " ++
   points_to_string ps ++ ", " ++
   show f ++
   ")"

依赖

points_to_string :: [Point] -> String
points_to_string ps = "[" ++ intercalate ", " (map point_to_string ps) ++ "]"

利用Data.List.intercalate在点之间添加逗号。

还请注意,如果仅需要标准列表/元组打印格式,则可以直接使用

candidate_to_string :: Candidate -> String
candidate_to_string = show