元组声明进入无限循环

时间:2017-10-05 17:26:35

标签: haskell tuples infinite-loop

在Prelude中尝试这个

^([^$]*)(?=\$)

我期待^,但我得到一个无限循环

为什么?

如何以简短的方式做到这一点?

3 个答案:

答案 0 :(得分:8)

如果你定义

ghci> factorial n = if n == 0 then 1 else n * (factorial (n - 1))

您希望RHS上factorial的使用与LHS上的factorial相同,对吗?

以同样的方式,以下定义了ij

ghci> (i,j) = (j,i)

答案 1 :(得分:3)

我能想到的最短序列是:

(i', j') = (i, j)
(i, j) = (j', i')

这当然仅对GHCi有效,就像原始序列一样。在普通的Haskell模块中,这样的定义不能出现在相同的词法范围内。

答案 2 :(得分:2)

您可以使用GHCi在隐式IO do块中运行的属性,并且do binds中的变量不在其右侧的范围内:

(i, j) <- return (j, i)

如果你启用了-Wname-shadowing,你会收到警告(包括通过-Wall)。