我试图在一个函数中编写3-4 where语句,但我得到错误,无法做到,我试图做这样的事情:
foo x=
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1= samplefunct1 x
foo2= samplefunct2 x
foo3= samplefunct3 x
我知道这段代码有点没用,但我只是写了这个例子来说明我的意思。
有人能帮我吗?
删除foo x
之后的=
,并像
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1 = samplefunct1 x
foo2 = samplefunct2 x
foo3 = samplefunct3 x
如果你的缩进有点不均匀,像这样:
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1= samplefunct1 x
foo2= samplefunct2 x
foo3= samplefunct3 x
那么确实,错误消息谈到了意想不到的=
(并且在将来,请在问题正文中包含完整的错误消息)。
您可以通过重新对齐或使用显式分隔符{ ; }
来修复此错误,使其为white-space–不敏感:
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where { foo1= samplefunct1 x ;
foo2= samplefunct2 x ;
foo3= samplefunct3 x }
这个运行得很好(并不是说它是一个很好的样式)。有时候你甚至会觉得它很整齐,但其实不然,如果有一些制表符隐藏在空白区域
这段代码几乎是正确的,你只需要正确的缩进:空白在haskell中很重要。此外,在foo
之后使用=
是一个错误,因此您也必须删除它。结果是:
foo x
| x == foo1 = 5
| x == foo2 =3
| x == foo3 =1
| otherwise =2
where foo1= whatever1 x
foo2= whatever2 x
foo3= whatever3 x