我的 Haskell 代码中的 indentation/layout 错误在哪里?
Where is the indentation/layout error in my Haskell code?
我正试图在 Haskell 完成一个简单的家庭作业,以便在我的大学 class 完成,但我无法弄清楚为什么我的代码无法编译:
-- Comments
module Main where
main :: IO ()
main = do
n <- readLn
print (fac n)
print (facList n)
print (sumFacs n)
print (fibonacci n)
-- Aufgabe 2 (a):
fac :: Int -> Int
let
fac 0 = 1
fac i = i * fac(i - 1)
-- Aufgabe 2 (b):
facList :: Int -> Int -> [Int]
let
facList x y = [fac m | m <- [x..y]]
sumFacs :: Int -> Int -> Int
let
sumFacs x y = sum (facList x y)
-- Aufgabe 3:
fibonacci :: Int -> Int
let
fibonacci 0 = 1
fibonacci 1 = 1
fibonacci i = fibonacci (i - 1) + fibonacci (i - 2)
当我尝试使用 Glasgow 编译器编译上述代码时,出现以下错误消息:
Uebung01.hs:19:1: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
19 | facList :: Int -> Int -> [Int]
| ^
所有功能都在交互模式下工作。很抱歉提出这样一个简单的问题,但我对 Haskell 完全陌生,并且真的很难理解空格规则的工作原理。我看过类似问题的答案,但我仍然找不到我的错误。感谢阅读。
A let
block [Haskell-report] 期望 in
指定表达式。在您的 fac
函数中,您定义了一个 let
块,但没有 in
,这用于定义您可以在 in
中使用的局部范围变量条款。但是,您在这里 不需要 一个 let
,您可以将 fac
定义为:
fac :: Int -> Int
fac 0 = 1
fac i = i * fac (i - 1)
您需要以类似的方式重构其他功能。
我正试图在 Haskell 完成一个简单的家庭作业,以便在我的大学 class 完成,但我无法弄清楚为什么我的代码无法编译:
-- Comments
module Main where
main :: IO ()
main = do
n <- readLn
print (fac n)
print (facList n)
print (sumFacs n)
print (fibonacci n)
-- Aufgabe 2 (a):
fac :: Int -> Int
let
fac 0 = 1
fac i = i * fac(i - 1)
-- Aufgabe 2 (b):
facList :: Int -> Int -> [Int]
let
facList x y = [fac m | m <- [x..y]]
sumFacs :: Int -> Int -> Int
let
sumFacs x y = sum (facList x y)
-- Aufgabe 3:
fibonacci :: Int -> Int
let
fibonacci 0 = 1
fibonacci 1 = 1
fibonacci i = fibonacci (i - 1) + fibonacci (i - 2)
当我尝试使用 Glasgow 编译器编译上述代码时,出现以下错误消息:
Uebung01.hs:19:1: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
19 | facList :: Int -> Int -> [Int]
| ^
所有功能都在交互模式下工作。很抱歉提出这样一个简单的问题,但我对 Haskell 完全陌生,并且真的很难理解空格规则的工作原理。我看过类似问题的答案,但我仍然找不到我的错误。感谢阅读。
A let
block [Haskell-report] 期望 in
指定表达式。在您的 fac
函数中,您定义了一个 let
块,但没有 in
,这用于定义您可以在 in
中使用的局部范围变量条款。但是,您在这里 不需要 一个 let
,您可以将 fac
定义为:
fac :: Int -> Int
fac 0 = 1
fac i = i * fac (i - 1)
您需要以类似的方式重构其他功能。