这不是在Haskell中定义fpcenter函数的正确方法吗? :
-- | Main entry point to the application.
module Main where
-- | The main entry point.
main :: IO ()
main = do
putStrLn "Welcome to FP Haskell Center!"
putStrLn "Have a good day!"
let exp x n | n == 0 = 1
| n == 0 = 1
| n == 1 = x
| even n = exp (x * x) m
| odd n = x * exp (x*x) (m-1)
where m = n `div` 2
在src/Main.hs@12:2-12:3 parse error on input |
行显示| n == 0 = 1
添加到Prelude时正确定义了该功能。
更新:附上错误消息截图 -
答案 0 :(得分:2)
let
不用于顶级绑定(请查看main
)。只需写下:
exp x n
| n == 0 = 1
| n == 1 = x
| even n = exp (x * x) m
| odd n = x * exp (x * x) (m - 1)
where m = n `div` 2
此外,当您使用let
或let
- in
时,它的绑定块遵循与do
相同的布局规则 - 块必须缩进和块中的第一项一样多。人们通常以两种方式之一缩进事物:
let
a = 2
f x y
| x < y = x
| otherwise = y
let a = 2
f x y | x < y = x
| otherwise = y
我更喜欢前一种风格,因为它不需要经常更改空格。