毕达哥拉斯检查 Haskell
Pythagoras check Haskell
最近开始使用 Haskell,但我在一些基础知识方面遇到了问题。
我编写了一个简单的程序来对一个名为 'square' 的变量求平方。现在我正在尝试编写一个名为 pyth 的程序,它接受 3 个变量,将它们全部输入平方,然后将平方与 b 平方相加,看它是否等于 c 平方,以确定它们是否形成毕达哥拉斯三元组。
square :: Int -> Int
square x = x*x
pyth :: Int -> Int -> Int -> Bool
pyth a b c
a = square a
b = square b
c = square c
a+b == c = True
您犯了一些语法错误。 pyth
函数的正确版本如下所示:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = a' + b' == c'
where
a' = square a
b' = square b
c' = square c
请注意,我更改了变量名称并添加了一个 where
块,您可以在其中存储平方值。在主函数体 (a' + b' == c'
) 中,您对毕达哥拉斯定理进行实际检查。
你的问题实际上并没有包含任何问题,但从你写的内容来看,很明显你正在努力使用 Haskell 的语法。
通过查看您的代码,我的猜测是您将 Haskell 的模式匹配语法与命令式语言的典型语句序列混淆了。
您可以通过以下方式实现您想要实现的目标:
square :: Int -> Int
square x = x*x
pyth :: Int -> Int -> Int -> Bool
pyth a b c = a' + b' == c'
where a' = square a
b' = square b
c' = square c
请注意,a'
是 Haskell 中的常规变量,'
是标识符中的有效字符。此示例与将函数编写为相同:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = (square a) + (square b) == (square c)
如您所见,没有语句序列,函数是单个表达式。我们使用 where
从我们正在编写的表达式中提取子表达式,并为它们命名,例如为了可读性或避免重复,但这并不意味着它们将按顺序计算或其中之一是结果。即使你是这样写的:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = result
where a' = square a
b' = square b
c' = square c
result = a' + b' == c'
都是一个表达式,可以按任何顺序编写。像下面这样:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = result
where result = a' + b' == c'
a' = square a
b' = square b
c' = square c
我建议通过 Learn you a haskell。对于初学者来说,这是一个非常好的资源。
最近开始使用 Haskell,但我在一些基础知识方面遇到了问题。
我编写了一个简单的程序来对一个名为 'square' 的变量求平方。现在我正在尝试编写一个名为 pyth 的程序,它接受 3 个变量,将它们全部输入平方,然后将平方与 b 平方相加,看它是否等于 c 平方,以确定它们是否形成毕达哥拉斯三元组。
square :: Int -> Int
square x = x*x
pyth :: Int -> Int -> Int -> Bool
pyth a b c
a = square a
b = square b
c = square c
a+b == c = True
您犯了一些语法错误。 pyth
函数的正确版本如下所示:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = a' + b' == c'
where
a' = square a
b' = square b
c' = square c
请注意,我更改了变量名称并添加了一个 where
块,您可以在其中存储平方值。在主函数体 (a' + b' == c'
) 中,您对毕达哥拉斯定理进行实际检查。
你的问题实际上并没有包含任何问题,但从你写的内容来看,很明显你正在努力使用 Haskell 的语法。
通过查看您的代码,我的猜测是您将 Haskell 的模式匹配语法与命令式语言的典型语句序列混淆了。 您可以通过以下方式实现您想要实现的目标:
square :: Int -> Int
square x = x*x
pyth :: Int -> Int -> Int -> Bool
pyth a b c = a' + b' == c'
where a' = square a
b' = square b
c' = square c
请注意,a'
是 Haskell 中的常规变量,'
是标识符中的有效字符。此示例与将函数编写为相同:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = (square a) + (square b) == (square c)
如您所见,没有语句序列,函数是单个表达式。我们使用 where
从我们正在编写的表达式中提取子表达式,并为它们命名,例如为了可读性或避免重复,但这并不意味着它们将按顺序计算或其中之一是结果。即使你是这样写的:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = result
where a' = square a
b' = square b
c' = square c
result = a' + b' == c'
都是一个表达式,可以按任何顺序编写。像下面这样:
pyth :: Int -> Int -> Int -> Bool
pyth a b c = result
where result = a' + b' == c'
a' = square a
b' = square b
c' = square c
我建议通过 Learn you a haskell。对于初学者来说,这是一个非常好的资源。