【发布时间】:2013-09-26 02:22:54
【问题描述】:
在我开始的函数式编程课程中,我正在尝试编写一个程序来返回给定列表的中间三分之一。据我所知,最直接的方法是获取列表的前三分之二,然后删除不需要的前三分之一,只返回中间三分之一。但是,我似乎无法正确使用语法。
middlethird :: [a] -> [a]
middlethird l
|len `mod` 3 /= 0 = []
|otherwise = drop (1 `div`take ((2 `div` 3) len) l drop ((1 `div` 3)*len) l
where len = length l
现在我在'where'上遇到一个解析错误,我不明白......但即使在此之前我只是为我输入的每个列表获取一个空集,而它应该只返回一个空当列表的长度不能被 3 整除时的列表。
我很困惑...任何帮助或指示将不胜感激。正如我所提到的,这是家庭作业的一部分,但这是最后一部分,其他一切似乎都运行良好。对不起,我的经验不足!
编辑:没关系,我想通了。
middlethird :: [a] -> [a]
middlethird l
|mod len 3 /= 0 = []
|otherwise = drop (div len 3) (take (2*(div len 3)) l)
where len = length l
【问题讨论】:
-
这样想怎么样:设 n 为列表长度的三分之一。现在你想从列表中删除 n 并取出剩余的 n。
标签: haskell