我试图制作一个非常短的代码,因为我们有一个偏爱最短代码的规则。我们必须创建一个函数,以相同的顺序将列表转换为升序和降序列表的新列表:例如。[1,6,2,1,7,3,2,8,4]
, 变成[[1,6],[2,1],[7],[3,2],[8],[4]]
所以我尝试执行以下操作:
func :: Ord a => [a] -> [[a]]
func xs = f1 d [a]
f1 [] ys = [c]
f1 xs ys | a >= b = d `f1` a:ys
| otherwise = c: d `f2` [a]
f2 [] ys = [c]
f2 xs ys | a < b = d `f2` a:ys
| otherwise = c : d `f1` [a]
where a = head xs
b = head ys
c = reverse ys
d = tail xs
但我明白了
parse error on input '='
上line "b = head ys"
。
我认为可以在 where 块中定义多个函数?
其他缩进会产生很多错误
not in scope 'a'
not in scope 'b'
not in scope 'c'
not in scope 'd'
或者
parse error on input 'b'
我必须这样做以保存一些令牌/具有更短的代码。