好的,也许标题有点混乱,但我想做的是有一个这样的功能:但无需再次编写f (a:b:c:d:is) = ...
即可引用。a:b:c:d
事实证明,我不能做类似的事情e@(a:b:c:d):is
并得到预期的结果。有任何想法吗?
问问题
133 次
2 回答
6
我能想到的最好的方法是使用视图模式,如下所示:
{-# LANGUAGE ViewPatterns #-}
f (splitAt 4 -> (as@[a,b,c,d], is)) = is ++ [d,c,b,a] ++ as
于 2012-01-03T11:52:11.497 回答
5
你不能这样做,一个原因是这a:b:c:d
不是一个类型良好的表达式。通过 的定义中的绑定f
,a, b, c, d
都具有相同的类型,例如t
,但列表构造函数的类型是
(:) :: t -> [t] -> [t]
您可以通过 binding 来实现您想要的let foo = take 4 inputList
。诚然笨重,但我想不出比我头上更好的东西了。
于 2012-01-03T11:51:06.827 回答