Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何将getLine设置为仅接收可转换为数字的字符串? main=do putStrLn“你好,请问姓名?” 首先,这里有一个快速的想法可以帮助你: main = do putStrLn "Hello,Name please?" first <- _Haskell_Functional Programming - Fatal编程技术网

Haskell 如何将getLine设置为仅接收可转换为数字的字符串? main=do putStrLn“你好,请问姓名?” 首先,这里有一个快速的想法可以帮助你: main = do putStrLn "Hello,Name please?" first <-

Haskell 如何将getLine设置为仅接收可转换为数字的字符串? main=do putStrLn“你好,请问姓名?” 首先,这里有一个快速的想法可以帮助你: main = do putStrLn "Hello,Name please?" first <- ,haskell,functional-programming,Haskell,Functional Programming,如何将getLine设置为仅接收可转换为数字的字符串? main=do putStrLn“你好,请问姓名?” 首先,这里有一个快速的想法可以帮助你: main = do putStrLn "Hello,Name please?" first <- getLine second <- getLine third <- getLine if (second == "divide") then putStrLn (show (read first ::Double )/ (read

如何将getLine设置为仅接收可转换为数字的字符串?
main=do
putStrLn“你好,请问姓名?”

首先,这里有一个快速的想法可以帮助你:

main = do 
putStrLn "Hello,Name please?"
first <- getLine
second <- getLine
third <- getLine
if (second == "divide") then putStrLn (show (read first ::Double )/ (read third :: Double))
    else putStrLn "Cannot do"

如果用户输入一个随机字符串,会发生什么?没有考虑到这一点,可能会抛出一个错误?与其定义自己的验证器,为什么不使用
readMaybe
from
Text.Read
@雷恩里奇:是的,这样做是绝对有效的(甚至更好)。
import Control.Applicative
import Data.Char

getNum :: (Num a, Read a) => IO (Maybe a)
getNum = do
  (x, xs) <- break (not . isDigit ) <$> getLine
  case xs of
    [] -> return $ Just $ read x
    _ -> return Nothing

main :: IO ()
main = do
  x <- getNum :: IO (Maybe Double)
  case x of
    Nothing -> do
      putStrLn "Not a number, try again"
      main
    Just x' ->
      putStrLn $ "Your number: " ++ show x'
  return ()
import Control.Applicative
import Data.Char
import Data.Maybe

getNum :: (Num a, Read a) => IO (Maybe a)
getNum = do
  (x, xs) <- break (not . isDigit ) <$> getLine
  case xs of
    [] -> return $ Just $ read x
    _ -> return Nothing

main :: IO ()
main = do
  putStr "First: "
  x <- getNum :: IO (Maybe Double)

  putStr "Operation: "
  op <- getLine

  putStr "Second: "
  y <- getNum :: IO (Maybe Double)

  if isJust x && isJust y then do
    let
      x' = fromJust x
      y' = fromJust y
    putStr "Result: "
    case op of
      "divide" -> putStrLn $ show $ x' / y'
      "sum" -> putStrLn $ show $ x' + y'
      _ -> putStrLn "No operation"
  else
    putStrLn "Invalid numbers"

  return ()