返回给定特定整数输入的字符串
Returning a string given a particular integer input
我正在尝试学习 Haskell,但在尝试编写一个简单的函数时遇到了一个问题。使用以下代码:
squarenumber x = if x<10
then x^2
else return "Input is too large, please input a value less than 10."
问题似乎出在函数的 else
部分。如果输入大于 10,我该如何修改此函数,使其 return 成为一个字符串?
你不能为所欲为。在 Haskell 中,表达式应该具有相同的类型。它在某些情况下不应该是 Integer
而在其他一些情况下不应该是 String
。但是你想要的可以使用 Either
数据类型来实现:
squarenumber :: (Ord a, Num a) => a -> Either String a
squarenumber x = if x < 10
then Right (x^2)
else Left $ "Input is too large, please input a value less than 10."
您还混淆了 Haskell 的 return
与命令式语言。请注意,在 Haskell return
中具有完全不同的含义。它是 Monad 类型类的方法之一。
我正在尝试学习 Haskell,但在尝试编写一个简单的函数时遇到了一个问题。使用以下代码:
squarenumber x = if x<10
then x^2
else return "Input is too large, please input a value less than 10."
问题似乎出在函数的 else
部分。如果输入大于 10,我该如何修改此函数,使其 return 成为一个字符串?
你不能为所欲为。在 Haskell 中,表达式应该具有相同的类型。它在某些情况下不应该是 Integer
而在其他一些情况下不应该是 String
。但是你想要的可以使用 Either
数据类型来实现:
squarenumber :: (Ord a, Num a) => a -> Either String a
squarenumber x = if x < 10
then Right (x^2)
else Left $ "Input is too large, please input a value less than 10."
您还混淆了 Haskell 的 return
与命令式语言。请注意,在 Haskell return
中具有完全不同的含义。它是 Monad 类型类的方法之一。