如何显示含两种数据类型的元组详情?Haskell代码实现疑问
解决Haskell中格式化包含Film与Float的元组问题
嘿,你的问题核心是没正确解构嵌套的元组参数,导致没法提取里面的字段来格式化输出。我帮你一步步修正代码:
首先,先明确你的Film类型(如果还没定义类型别名的话,建议先定义,让代码更清晰):
-- 把五元组定义成Film类型,方便复用 type Film = (String, String, Int, [String], [String])
接下来是修正后的格式化函数,关键是正确解构两层元组:外层是(Film, Float),内层Film本身又是一个五元组,所以要把每个字段都拆出来:
formFilmAsStringInt :: (Film, Float) -> String formFilmAsStringInt ((title, director, year, likes, dislikes), number) = "Title: " ++ title ++ "\n" ++ "Director: " ++ director ++ "\n" ++ "Year: " ++ show year ++ "\n" ++ "Likes: " ++ unwords likes ++ "\n" ++ "Dislikes: " ++ unwords dislikes ++ "\n" ++ "Rating: " ++ show number ++ "\n\n"
关键修正点说明:
- 原来的函数参数写法错误,没有解构嵌套元组,现在用
((title, director, year, likes, dislikes), number)直接把所有字段提取成变量,这样就能在函数体里直接使用了。 - 补充了你原来没用到的Float类型
number,用show把它转换成字符串,和其他内容拼接输出。 - 保持了你原来的格式逻辑,比如用
unwords把列表转成空格分隔的字符串,show把数字转成字符串。
测试示例
你可以用下面的代码测试效果:
-- 准备一个测试用的元组 testFilm :: (Film, Float) testFilm = (("Inception", "Christopher Nolan", 2010, ["Great plot", "Stunning visuals"], ["Too confusing for some"]), 8.8) -- 调用函数输出格式化内容 main = putStrLn $ formFilmAsStringInt testFilm
运行后会得到这样的输出:
Title: Inception
Director: Christopher Nolan
Year: 2010
Likes: Great plot Stunning visuals
Dislikes: Too confusing for some
Rating: 8.8
内容的提问来源于stack exchange,提问作者sam786
相关产品推荐
相关产品推荐

