代码
type Point = (Float,Float)
type Candidate = (Point,Point,[Point],Float)
print_list :: [[Point]] -> String
print_list [] = ""
print_list [x:xs] = show x ++ "," ++ print_list(xs)
candidate_to_string :: Candidate -> String
candidate_to_string (a, x, y:ys, z) = "Start point: " ++ show a ++
"\nSupporting Points: " ++ print_list(y:ys) ++ "\nEnd Point: " ++ show x
++ "\nTime: " ++ show z
错误消息
C:\\Users\conor\Desktop\haskellcoursework.hs:47:50: error:
* Couldn't match type `(Float, Float)' with `[Point]'
Expected type: [[Point]]
Actual type: [Point]
* In the first argument of `print_list', namely `(xs)'
In the second argument of `(++)', namely `print_list (xs)'
In the second argument of `(++)', namely `"," ++ print_list (xs)'
|
47 | print_list [x:xs] = show x ++ "," ++ print_list(xs)
| ^^
C:\\Users\conor\Desktop\haskellcoursework.hs:50:107: error:
* Couldn't match type `(Float, Float)' with `[Point]'
Expected type: [[Point]]
Actual type: [Point]
* In the first argument of `print_list', namely `(y : ys)'
In the first argument of `(++)', namely `print_list (y : ys)'
In the second argument of `(++)', namely
`print_list (y : ys)
++ "\nEnd Point: " ++ show x ++ "\nTime: " ++ show z'
|
50 | candidate_to_string (a, x, y:ys, z) = "Start point: " ++ show a ++
"\nSupporting Points: " ++ print_list(y:ys) ++ "\nEnd Point: " ++ show x ++
"\nTime: " ++ show z ^^^^
|
我使用的签名是为我指定的。我的任务是编写一个函数候选人字符串到候选字符串::候选->字符串,该函数创建字符串表示形式 候选人每个点都以其自己的行(从起点开始)编写,然后是 所有支持点,并以终点为终点。时间打印在包含以下内容的额外行中 字符串“ Time:”和值。
答案 0 :(得分:3)
print_list
需要一个[[Point]]
-点列表的列表
print_list :: [[Point]] -> String
-- ^^^^^^^^^ --
,但您在此处向其传递了[Point]
点列表。因此,出现类型错误:
candidate_to_string :: Candidate -> String
candidate_to_string (a, x, y:ys, z) =
... print_list(y:ys) ...
-- ^^^^^^ this is a [Point]
错误是print_list
应该改为[Point] -> String
。更详细地
print_list [x:xs] = show x ++ "," ++ print_list(xs)
是错误的,因为[x:xs]
是仅包含一个元素的列表,即列表x:xs
。您不需要此处的列表,因此只需使用类似
print_list :: [Point] -> String
print_list [] = ""
print_list [x] = show x -- we don't want a trailing comma here
print_list (x:xs) = show x ++ "," ++ print_list xs