haskell如何实现首尾相连的“环”
haskell如何实现“环”——首尾相连
data Week = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
deriving (Show,Enum,Eq)
想要实现:next Monday = Tuesday,next Tuesday = Wednesday...next Sunday应该是Monday,如此循环。
succ Sunday和pred Monday都是非法的
现在只能如下表达
next :: Week->Week
next x |x==Sunday = Monday
|otherwise = succ x
能否有更一般更抽象的实现呢?
[ 本帖最后由 pass12163com 于 2009-4-27 01:33 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
嗯
应该是
toEnum n = case n `mod` 7 of
这样写
实现 toEnum 的时候对其参数先取模。
难道是:
复制代码
run
复制代码
[ 本帖最后由 izhier 于 2009-4-28 09:36 编辑 ]
你不应该 deriving Enum,而应该自己 instance Enum。
谢谢各位的回复。
用mod的确够一般化,只是看起来像用的数组下标概念,少了FP的意味。
[ 本帖最后由 pass12163com 于 2009-4-27 16:33 编辑 ]
嗯
效率太低了
这个很棒。只需确定循环周期。
上例中的n是个问题。
这个也可以
next :: Week -> Week
next x = toEnum $ mod (fromEnum x + 1) 7
这一个可以吗?
用cycle实现首尾相连
复制代码