【发布时间】:2017-05-12 12:23:05
【问题描述】:
所以,我知道,Haskell 中有一个内置函数可以反转列表,但我正在尝试编写自己的小函数,只是为了练习一些 Haskell。我想到了以下代码,遗憾的是它不起作用。你们能告诉我我做错了什么吗?
rev :: [Int] -> [Int]
rev [] = []
rev [x] = last [x] : rev init [x]
【问题讨论】:
-
[x]是一个包含单个元素(名为x)的列表。last [x]只是x和init [x]是[]。所以last [x] : rev init [x]就是x : rev [],也就是x : [],也就是[x]。所以你的最后一行相当于rev [x] = [x]。但是你的主要问题是你没有一个包含多个元素的列表的案例。