Haskell输入列表-列表上的递归

用户名

我希望用户提供列表的大小,然后在其他功能中使用该列表。像这样

divv x = [x..2]

qsort       :: [Int] -> [Int]    
qsort []     = []    
qsort (x:xs) =    
   qsort smaller ++ [x] ++ qsort larger    
   where    
      smaller = [a | a <- xs, a <= x]    
      larger  = [b | b <- xs, b > x]  

当我在控制台divv 10中写入时,我将得到列表[10..2]
当我写入qsort [1,2,8,5,3,9,0]时,我将得到排序的列表。

我希望用户仅给出一个数字,例如100,然后调用qsort(divv 100)。我该怎么做?

提前致谢

丹普汀

要从终端读取输入,可以使用getLine :: IO String但是,在将字符串传递给函数之前,您需要将其转换为整数类型(在这种情况下为Int)。您可以使用函数执行此操作read :: Read a => String -> a要打印字符串,可以使用函数putStrLn :: String -> IO ()qsort (divv n)但是,在打印之前,您需要将其结果转换为字符串。这是通过函数完成的show :: Show a => a -> String

将所有内容放在一起,首先要说getLine一个字符串,比如说s接下来,您想要read将该字符串转换为Int,例如n最后,您想用来在list上putStrLn打印调用结果为了对这些动作进行排序,您将需要monad中进行操作,或以其他符号(对于诸如之类的monadic组合符而言只是反义词)进行操作。这是一个示例实现。作为练习,请尝试将此实现转换为符号:showqsort (divv n)bindIOdobinddo

sortList :: IO ()
sortList = fmap read getLine >>= putStrLn . show . qsort . divv

请注意,您对的实现divv是不正确的。它应该读取divv n = [n,n-1..2](以便从降序生成从n的整数列表2)。还要注意,可能有更好的方法来完成以下任务:向用户询问输入,并返回将输入应用于某些功能的结果。但是我认为这是最简单的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章