在Prelude中尝试这个
^([^$]*)(?=\$)
我期待^
,但我得到一个无限循环
为什么?
如何以简短的方式做到这一点?
答案 0 :(得分:8)
如果你定义
ghci> factorial n = if n == 0 then 1 else n * (factorial (n - 1))
您希望RHS上factorial
的使用与LHS上的factorial
相同,对吗?
以同样的方式,以下定义了i
和j
:
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)。