0

我想从文件中读取(每行包含 haskell 命令)。我想逐行阅读并执行这些并显示结果

我的以下代码不起作用... print 没有处理命令,它只是显示它:

import System.IO
import Control.Monad

main = do
  fileContents <- readFile "Instructions.txt"
  mapM_ f (lines fileContents)

f line = do
    putStrLn ("Processing Instruction:" ++ line)
    print line

指令文件包含 haskell 命令。

4

2 回答 2

0

您可能正在寻找 unsafeEval

http://hackage.haskell.org/packages/archive/plugins/1.5.1.3/doc/html/System-Eval-Haskell.html

但这几乎可以肯定对于任何实际程序来说都是一个非常糟糕的主意,并且不仅违反了编程的每条准则和规则,而且违反了 Haskell 编程的基本原则。

如果您只想逐行读取文件并输出结果,ghc已经为您很好地完成了这项工作。

ghc -e "command"将执行命令并输出到标准输出,因此很容易编写一个简单的 bash 脚本来为您执行此操作:

#!/bin/bash
# linebyline.sh

while read line; do
    ghc -e "$line"
done

您可以通过以下方式运行:

cat myfile.txt | linebyline.sh

或者您甚至不需要单独的脚本:

cat myfile.txt | while read line; do ghc -e "$line"; done
于 2013-09-08T10:00:58.287 回答
0

解决方案非常简单:更改printf解释该行并执行它的函数。

Iit 非常易于使用systemSystem.Cmd运行命令ghc - e。然后你的代码变成

import System.IO
import System.Cmd
import Control.Monad

main = do
  fileContents <- readFile "Instructions.txt"
  mapM_ f (lines fileContents)

f line = do
  putStrLn ("Processing Instruction:" ++ line)
  system $ "ghc -e " ++ show line

你仍然需要添加错误检查和类似的东西,但我会把这些部分留给你,因为它们不是问题的核心。

于 2013-09-08T01:21:00.973 回答