我该如何解决这个 Haskell 模式匹配练习?
How can I solve this Haskell pattern matching exercise?
我不太明白在这个 Haskell 练习中我必须做什么。谁能帮我解决一下?
关于复杂的模式匹配:
给出表达式 x0、x1 和 x2,其函数 f
returns 分别为 0、1 和 2。即,给出 x0、x1 和 x2 的一些定义,使得 f x0 == 0、f x1 == 1 和 f x2 == 2。
这里是函数的定义f
:
f :: [[(a, [b])]] -> Int
f [(x, xs): [y, ys]] = 0
f ([_]: [(x, [xs])]: [y, ys]: []) = 1
f ([(x, y: _: [])]: []) = 2
出于测试目的,必须计算这 3 个表达式:
f x0 == 0
f x1 == 1
f x2 == 2
你应该这样写:
x0 = [ ... your answer here ... ]
x1 = [ ... your answer here ... ]
x2 = [ ... your answer here ... ]
putStrLn $ "f x0 = " <> show (f x0)
putStrLn $ "f x1 = " <> show (f x1)
putStrLn $ "f x2 = " <> show (f x2)
重点是证明您可以阅读您引用的 f
定义中的模式并找到适合的值。
一些提示:
看f
的类型。每个答案应该是成对列表的列表,其中每对由一个值和一个列表组成。因此,正确类型的值(但不是您想要的答案)可能是 [[(1,[56,64,23]), (2, [78])], []]
。这是一个包含两个子列表的列表。第一个有两个值,第二个有 none.
我在示例中使用了整数,但您可以使用任何其他类型。
第一个问题使用 :
后跟一个包含两个元素的列表。这意味着答案将包含 3 个元素。并且 3 元素列表将成为外部列表(列表的列表,记住)中的唯一项。
我不太明白在这个 Haskell 练习中我必须做什么。谁能帮我解决一下?
关于复杂的模式匹配:
给出表达式 x0、x1 和 x2,其函数 f
returns 分别为 0、1 和 2。即,给出 x0、x1 和 x2 的一些定义,使得 f x0 == 0、f x1 == 1 和 f x2 == 2。
这里是函数的定义f
:
f :: [[(a, [b])]] -> Int
f [(x, xs): [y, ys]] = 0
f ([_]: [(x, [xs])]: [y, ys]: []) = 1
f ([(x, y: _: [])]: []) = 2
出于测试目的,必须计算这 3 个表达式:
f x0 == 0
f x1 == 1
f x2 == 2
你应该这样写:
x0 = [ ... your answer here ... ]
x1 = [ ... your answer here ... ]
x2 = [ ... your answer here ... ]
putStrLn $ "f x0 = " <> show (f x0)
putStrLn $ "f x1 = " <> show (f x1)
putStrLn $ "f x2 = " <> show (f x2)
重点是证明您可以阅读您引用的 f
定义中的模式并找到适合的值。
一些提示:
看
f
的类型。每个答案应该是成对列表的列表,其中每对由一个值和一个列表组成。因此,正确类型的值(但不是您想要的答案)可能是[[(1,[56,64,23]), (2, [78])], []]
。这是一个包含两个子列表的列表。第一个有两个值,第二个有 none.我在示例中使用了整数,但您可以使用任何其他类型。
第一个问题使用
:
后跟一个包含两个元素的列表。这意味着答案将包含 3 个元素。并且 3 元素列表将成为外部列表(列表的列表,记住)中的唯一项。