我只是想看看WinGHCi是否可用于Haskell编程,而且我不知道为什么这会显示上述错误。
我不知道这是否是适用于Haskell的正确应用程序,如果您知道另一个可以实际运行的应用程序,我将不胜感激。
f (x:xs) = f ys ++ [x] ++ f zs
where
ys = [a | a ← xs, a ≤ x]
zs = [b | b ← xs, b > x]
<interactive>:21:20: error:
parse error on input ‘=’
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
答案 0 :(得分:2)
存在两个相互交织的问题:是否需要let
来引入定义,以及是否可以编写多行定义。
首先,let
。 8.0之前的版本,GHCi要求在let
中引入定义:
let f (x:xs) = ...
从8.0开始,您可以放下let
,GHCi会确定您要做什么。
对于多行语句,有两种方法可以执行此操作。一种是用:}
和:{
明确地分隔块:
Prelude> :{
Prelude| f (x:xs) = f ys ++ [x] ++ f zs
Prelude| where
Prelude| ys = [a | a <- xs, a <= x]
Prelude| zs = [b | b <- xs, b > x]
Prelude| :}
另一种通过:set +m
启用多行模式,似乎可以接受它。