lambda中的Haskell多个绑定

lambda中的Haskell多个绑定,haskell,Haskell,我是哈斯克尔的新手 我有这个代码(我对99个Haskell问题的一个练习的解决方案) 当我取消注释“-h=headx”时,我得到:“解析输入“=”上的错误” 但是 工作正常,为什么在lambda中使用带有多个语句的“let”时它不编译 我试着用where替换let encodeM2 ::(Eq a)=> [a]->[Structure a] encodeM2 l = map(\x->if si>1 then Multiple ( head x, si) else Sin

我是哈斯克尔的新手

我有这个代码(我对99个Haskell问题的一个练习的解决方案)

当我取消注释“-h=headx”时,我得到:“解析输入“=”上的错误”

但是

工作正常,为什么在lambda中使用带有多个语句的“let”时它不编译

我试着用where替换let

encodeM2 ::(Eq a)=> [a]->[Structure a]

encodeM2 l = map(\x->if si>1 then Multiple ( head x, si) else Single (head x)
   where si = length x)
但是它也不能编译,有什么问题吗?

在Haskell中

对齐
let
中的分配。在lambda中不能使用
where

在Haskell中


对齐
let
中的分配。您不能在lambda中使用
where

这是正确缩进的代码:(注意
如何让
绑定垂直对齐)

encodeM::Eq a=>[a]->[a结构]
encodeM l=map(\x->let size=length x
h=头部x英寸
如果大小>1
然后是倍数(h,大小)
其他(单个h)$
l组
这是您的代码可读性:

encodeM::Eq a=>[a]->[a结构]
encodeM=映射运行长度。组
哪里
运行长度x=
让尺寸=长度x
h=头部x英寸
如果大小>1
然后是倍数(h,大小)
其他单h
这是您的代码惯用语:

encodeM::Eq a=>[a]->[a结构]
encodeM=映射运行长度。组
哪里
运行长度[x]=单个x
运行长度xs=多个(头部xs,长度xs)

这是正确缩进的代码:(注意
如何让绑定垂直对齐)

encodeM::Eq a=>[a]->[a结构]
encodeM l=map(\x->let size=length x
h=头部x英寸
如果大小>1
然后是倍数(h,大小)
其他(单个h)$
l组
这是您的代码可读性:

encodeM::Eq a=>[a]->[a结构]
encodeM=映射运行长度。组
哪里
运行长度x=
让尺寸=长度x
h=头部x英寸
如果大小>1
然后是倍数(h,大小)
其他单h
这是您的代码惯用语:

encodeM::Eq a=>[a]->[a结构]
encodeM=映射运行长度。组
哪里
运行长度[x]=单个x
运行长度xs=多个(头部xs,长度xs)

我更喜欢使用if/then/else的模式匹配,因此您的代码变成:

encodeM :: (Eq a) => [a] -> [Structure a]
encodeM lst = map fun $ group lst
              where
                fun [x] = Single x
                fun l = Multiple (head l, length l)

我更喜欢使用if/then/else的模式匹配,因此您的代码变成:

encodeM :: (Eq a) => [a] -> [Structure a]
encodeM lst = map fun $ group lst
              where
                fun [x] = Single x
                fun l = Multiple (head l, length l)

谢谢。当你开始学习新语言时,通常你必须改变你的习惯(这是你从现在已经学过的语言中获得的),并根据新的语法和不同的思维方式进行调整。谢谢你的建议,非常感谢。当你开始学习新语言时,通常你必须改变你的习惯(这是你从现在已经学过的语言中获得的),并根据新的语法和不同的思维方式进行调整。谢谢你的建议。
encodeM :: (Eq a) => [a] -> [Structure a]
encodeM lst = map fun $ group lst
              where
                fun [x] = Single x
                fun l = Multiple (head l, length l)