Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 GHCi命令结果输出到txt文件_Haskell - Fatal编程技术网

将Haskell GHCi命令结果输出到txt文件

将Haskell GHCi命令结果输出到txt文件,haskell,Haskell,我是哈斯克尔的新手 我很难将命令结果从GHCi输出到文件。我想知道是否有人能给我一个简单的解释如何做到这一点?到目前为止,我在网上找到的例子似乎过于复杂 假设您有一个函数mungeData,您确实有 ghci> mungeData [1..5] [5,2,5,2,4,6,7,4,6,78,4,7,5,3,57,7,4,67,4,6,7,4,67,4] 写文件 您可以这样将其写入文件: ghci> writeFile "myoutput.txt" (show (mungeData

我是哈斯克尔的新手


我很难将命令结果从GHCi输出到文件。我想知道是否有人能给我一个简单的解释如何做到这一点?到目前为止,我在网上找到的例子似乎过于复杂

假设您有一个函数
mungeData
,您确实有

 ghci> mungeData [1..5]
 [5,2,5,2,4,6,7,4,6,78,4,7,5,3,57,7,4,67,4,6,7,4,67,4]
写文件 您可以这样将其写入文件:

ghci> writeFile "myoutput.txt" (show (mungeData [1..5])
ghci> writeFile "myoutput'.txt" $ unlines.map show $ mungeData [1..5]
我倾向于写作

ghci> writeFile "myoutput.txt" $ show $ mungeData [1..5]
去掉几个括号

把它读回来 你可以用电脑把它拿回来

ghci> fmap (read::String -> [Int]) $ readFile "myoutput.txt"
每行一个号码 您可以按如下所示的数字将其输出一行:

ghci> writeFile "myoutput.txt" (show (mungeData [1..5])
ghci> writeFile "myoutput'.txt" $ unlines.map show $ mungeData [1..5]
上面写的是

ghci> fmap (map read.lines::String -> [Int]) $ readFile "myoutput'.txt"
描述如何为GHCi输出着色(GHC>=7.6)。您可以指定一个日志函数,而不是预打印程序。例如,将以下内容添加到
.ghci.conf

:{
let logFile = "/home/david/.ghc/ghci.log"
    maxLogLength = 1024 -- max length of a single write
    logPrint x = appendFile logFile (take maxLogLength (show x) ++ "\n") >> print x
:}
:set -interactive-print=logPrint
这将把GHCi的输出记录到
GHCi.log

  • 日志文件必须已经存在,否则
    appendFile
    将发出投诉。你必须手动创建它

  • 它必须适合
    let
    语句,否则GHCi将拒绝它。使用
    :{:}
    在GHCi中添加多行支持

  • 显然,使用
    :l
    可以消除在
    ghci.conf
    中进行的所有导入,因此只能使用Prelude函数。Reddit帖子提到你可以重新定义
    :l
    ,但我对此一无所知。(如果您知道如何执行此操作,当然可以在日志文件不存在时自动生成日志文件。)


谢谢您的回复。这对我不起作用。我得到一个解析错误。我有一个函数,它向列表的每个元素添加一个。我写了一些类似的东西:
writeFile“myoutput.txt”(show(addOne(x)
,其中x是一个列表,如1:2:3:4:5:[]您不需要在
x
周围加括号,并且您缺少了一个紧括号。使用:
writeFile“myoutput.txt”(show(addOne x))
谢谢您的回复。@AndrewC,如果我正在运行测试,加载一个tests.hs文件,然后在提示符中键入main,然后按enter键执行100个测试用例,该怎么办?如果我想将其写入一个文件,怎么办?使用您的方法打印main对我不起作用。我感谢您对此提供的任何帮助;)您可以重写
main
以写入文件而不是屏幕,或者如果这太复杂,您可以使用
ghc Test.hs-O2-o Test.exe
(在linux/MacOS/unix等上仅
Test
)编译它,然后重定向其输出:
Test.exe>testoutput.txt
太好了!这是对功能的使用,这要感谢bravit(维塔利·布拉吉列夫斯基)。