Haskell 简单函数错误“;变量不在范围内“;哈斯克尔
我今天刚开始编写Haskell,一直在构建一个函数,从用户那里获取一个整数,乘以3,再加上1,然后检查它是否为偶数。将输出返回为布尔值,如果为偶数,则返回true。 对不起,如果代码太错误,我是哈斯克尔新手Haskell 简单函数错误“;变量不在范围内“;哈斯克尔,haskell,Haskell,我今天刚开始编写Haskell,一直在构建一个函数,从用户那里获取一个整数,乘以3,再加上1,然后检查它是否为偶数。将输出返回为布尔值,如果为偶数,则返回true。 对不起,如果代码太错误,我是哈斯克尔新手 checkIfEven :: Int -> Bool x <- readLn let checkIfEven x = (even ((x*3)+1)) print checkIfEven error: Variable not in scope: checkIf
checkIfEven :: Int -> Bool
x <- readLn
let checkIfEven x = (even ((x*3)+1))
print checkIfEven
error:
Variable not in scope: checkIfEven :: Int -> Bool
checkifeen::Int->Bool
x布尔
必须在Haskell中显式处理I/O,因为readLn
不是一个函数;这是一个IO动作。从将要检查的值作为参数的true函数开始更简单:
checkIfEven :: Int -> Bool
checkIfEven x = even (x*3 + 1)
注意,括号不是对偶数
调用的一部分,而是对表达式x*3+1
进行“分组”,因为偶数x*3+1
被解析为(偶数x)*3+1
现在我们有了一个纯函数,我们可以将它应用于用户输入的值
program :: IO Bool
program = do
x <- readLn
return (checkIfEven (read x))
关于IO(和单子)如何工作的完整解释超出了这个问题的范围;希望这能让您在进一步学习本主题时了解重点。您很荣幸能从一个不完美的问题中提供如此好的答案,并向新用户。。。我很佩服。
program = fmap (checkIfEven . read) readLn