List 使用Haskell中的interact从输入创建列表
我从Haskell开始,一直在研究I/O机制。我阅读了interact函数,该函数以String->String类型的函数作为参数。我试着编写一个简单的程序,从stdin中提取数字,创建一个列表并逐行打印List 使用Haskell中的interact从输入创建列表,list,haskell,io,functional-programming,List,Haskell,Io,Functional Programming,我从Haskell开始,一直在研究I/O机制。我阅读了interact函数,该函数以String->String类型的函数作为参数。我试着编写一个简单的程序,从stdin中提取数字,创建一个列表并逐行打印 import Data.List readIn = sort . map read . words writeOut = unlines . map show rangeList [n,m] = [n .. m] main = interact (writeOut . rangeList
import Data.List
readIn = sort . map read . words
writeOut = unlines . map show
rangeList [n,m] = [n .. m]
main = interact (writeOut . rangeList . readIn)
由于某种原因,它不会打印数字。您能帮我一下吗?
交互
要求您使用Ctrl+D(或Windows上的Ctrl+Z)向stdin输入文件结尾(EOF);当我键入该组合时,输出将根据需要显示。这是必要的,因为正如所述,“来自标准输入设备的整个输入作为其参数传递给[interact]”;因此,您需要显式地向stdin结束的位置发送信号
(顺便说一句,我甚至不知道你是如何编译你的程序的;当我尝试时,GHC给了我很多“不明确的类型”错误。我必须添加类型签名才能让它工作,这时我发现上面的解决方案可以工作。)快速评论:因为
范围列表
总是有两个值作为输入,使用2元组(n,m)
可能比使用列表更好,因为列表应该可以有任意数量的值。至于该计划的其余部分,乍一看是绝对不错的;我现在试着运行它,看看是否能让它工作。