2017-10-04 136 views
0

我试着运行这段代码,最终导致GHCi无法使用。 意思是,命令行(Windows)最终没有响应任何输入,只是显示一个空行。如何防止GHCi从此“崩溃”?

Prelude> b = ["Empty", "Discrete", "Distinct", "Defiant", "Useful", "Good", 
"Imperative", "Safe", "Lawful", "Unpresidented", "Decadent", "Rich", 
"Strong", "Marvelous", "Volatile", "Obtuse", "Acute", "Revolutionary", 
"Frank", "Regular"] 
Prelude> length b 
20 
Prelude> import Data.Char 
Prelude Data.Char> a = [ map toLower x | x <- a ] 
Prelude Data.Char> a 

......

+0

请用代码块格式化您的代码并提出一个完整的问题。什么是问题和发生了什么? –

+0

请改善您的问题。 1)将代码格式化为片段; 2)目前还不清楚“长度a”中的“a”来自哪里; 3)究竟“不可用”是什么意思? – Yuras

+0

你是什么意思,最终导致'ghci'无法使用? –

回答

4

这是完全可以预料和正常的行为。

a = [ map toLower x | x <- a ] 

a,其中所述递归永不结束一个递归定义。在等号两边注意a。 GHCi不会崩溃,它只会始终运行此代码,直到您通过按Ctrl-C中断代码。

+0

我以为Haskell很懒。为什么要评估定义? –

+3

@MarkNeu因为您已经要求在解释器提示符处输入它来打印它。 –

+1

@MarkNeu猜测:你打算写'a = [map toLower x | x < - b]'。注意'b'在最后! –