haskell - Haskell mutliline 守卫内部不工作
问题描述
您好,我是 Haskell 的新手,我认为我的问题很简单,但对我来说很重要。
这有效:
module Main where
main :: IO ()
main = do
inp <- getLine
let output i | odd i = "Alice" | even i = "Bob" | otherwise = "Weird"
putStrLn (output (read inp))
这不起作用
module Main where
main :: IO ()
main = do
inp <- getLine
let output i
| odd i = "Alice"
| even i = "Bob"
| otherwise = "Weird"
putStrLn (output (read inp))
我所知道的:在你声明的每个函数之前,你会在里面写“let”还是“let”,而不是写“in”。此外,当我将输出编写为非本地函数时,它也起作用了。
我误解了什么?
编辑:你会推荐这样写吗?
module Main where
main :: IO ()
main = do
inp <- getLine
let
output i
| odd i = "Alice"
| even i = "Bob"
putStrLn (output (read inp))
解决方案
您需要缩进警卫(与 的位置相比至少有一个额外的空间output
),例如:
main :: IO ()
main = do
inp <- getLine
let output i
| odd i = "Alice"
| even i = "Bob"
| otherwise = "Weird"
putStrLn (output (read inp))
由于数字是odd
or even
,因此您可以只使用otherwise
这种even
情况:
main :: IO ()
main = do
inp <- getLine
let output i
| odd i = "Alice"
| otherwise = "Bob"
putStrLn (output (read inp))
推荐阅读
- ios - textfield.becomeFirstResponder 没有保持文本字段快速集中
- c - 我怎样才能写一个 if thats 与一个 else 相关,然后在它下面写一个 if 与另一个 else 相关?
- android - 浮动操作按钮背景模糊
- mysql - MySQL GROUP 基于其他列的列,但也排除基于第二列的重复项
- mysql - 我在 MySQL 中的查询没有得到预期的结果
- arrays - 将其内容向后复制到另一个数组的数组无法正常工作
- c - LZW序列实现
- sumo - 如何从 Webots 中的 Highway_overtake.py 访问 SUMO 车辆?
- java - 如何定义一个构造函数来为每个数组调用它?
- c# - AcquireTokenAsync 为图形客户端库中的用户凭据返回 401(未授权)