【发布时间】:2019-03-22 07:18:36
【问题描述】:
我对 Haskell 中的 where 子句 在特定情况下的工作方式感到困惑。
我最大的问题是,是否有可能声明一个变量在 where 子句中执行某些操作,然后 使用返回通过另一个变量在 where 子句中声明?
例如:
someFunc :: somefunc
.
| (guard expression)
| (guard expression)
where a = 1+3
b = a + 2 --using back 'a' variable which was also declared in the where clause.
这可能吗?当我这样做时,haskell 不会报告任何错误,但我怀疑它是否正确。
【问题讨论】:
-
你试过了吗?是的,有可能,
b的定义甚至不需要在a的定义之后;... where { b = a + 2; a = 1 + 3 }也可以。 -
是的,你甚至可以使用 same 变量,比如
a = 1 + a,这有点危险,但例如where lst = 1 : lst有时用于声明一个用于某些操作的无限列表需要恒定内存。 -
你们为什么要在 cmets 中回答?!?!
-
@Libby: 因为它在语法上看起来像问题的
where子句:) -
@Libby 我在 cmets 中回答了,因为这不是一个很好的问题。 OP 询问完美的代码是否可以在没有明显尝试的情况下工作。
标签: haskell