解析错误 在两个函数的输入上 - Haskell



在这一段代码中,我的编译器在输入该行时抛出解析错误

tuple_up parsed_int list_of_points

let new_point = ((fst last_point), (snd last_point) + 1)

从之前关于这些错误的帖子中,他们建议检查前面的空格,我做到了。所有行都使用制表符正确缩进。似乎这个问题与第一行"让"之后的事情有关?

go_up :: [String] -> [(Int, Int)]
go_up string_path list_of_points =
let parsed_int = parse_current string_path
tuple_up parsed_int list_of_points
tuple_up :: Int -> [String] -> [(Int, Int)]
tuple_up 0 list_of_points = list_of_points
tuple_up increment list_of_points =
let last_point = tail list_of_points
let new_point = ((fst last_point), (snd last_point) + 1)
let new_list_of_points = list_of_points ++ new_point
tuple_up (increment - 1) new_list_of_points

do之外,let的工作方式与内部略有不同。特别:

  1. 它需要一个in。正确的语法是let x = y in z
  2. 可以绑定多个值,但每个值都必须具有相应的in或没有单独的let

将这些要点应用于您的代码:

go_up :: [String] -> [(Int, Int)]
go_up string_path list_of_points =
let parsed_int = parse_current string_path
in tuple_up parsed_int list_of_points
tuple_up :: Int -> [String] -> [(Int, Int)]
tuple_up 0 list_of_points = list_of_points
tuple_up increment list_of_points =
let last_point = tail list_of_points
new_point = ((fst last_point), (snd last_point) + 1)
new_list_of_points = list_of_points ++ new_point
in tuple_up (increment - 1) new_list_of_points

在此之后,您将得到另一个错误,因为last_point不是一个点,而是一个列表(查看tail的定义(,这意味着您无法对它应用fstsnd

在那之后,你会得到另一个错误,因为你的类型签名说list_of_points是一个String列表,但随后你试图把它的元素当作元组。

相关内容

  • 没有找到相关文章

最新更新