【发布时间】:2013-07-27 02:36:24
【问题描述】:
对 Haskell 非常陌生,正在尝试创建自己的反向函数。在这里写了这个,但它总是返回一个空列表 [] :
reverse' :: [a] -> [a]
reverse' xs = [xs !! k | k <- [((length xs) - 1)..0]]
谁能解释我做错了什么?
谢谢
【问题讨论】:
-
[length xs - 1, length xs - 2..0]工作吗? -
如果您还不习惯递归,在查看其他实现之前,请尝试以另一种方式定义
reverse,通过填写以下内容:reverse [] = ... ; reverse (x:xs) = ...并将其视为“空的反面”列表是...,而x与列表xs的相反是..." -
请注意,按索引访问列表通常是有问题的。它们是专门设计的,因此您可以轻松地递归地从头元素逐个元素地解构它们,但是当您在任意位置请求一个元素时,它们的性能会很差。
标签: haskell functional-programming