Haskell - 打印数字

标签 haskell printing

我写了下面的代码:

module Test where

import Char
import IO

main = do
    str <- readFile "no.txt"
    putStrLn (show(english str))

string2list :: String -> [String]
string2list "" = []
string2list s = words s


english :: String -> Int
english s
    | head (string2list s) == "one"     = 1
    | head (string2list s) == "two"     = 2
    | head (string2list s) == "three"   = 3
    | head (string2list s) == "four"    = 4
    | head (string2list s) == "five"    = 5
    | head (string2list s) == "six"     = 6
    | head (string2list s) == "seven"   = 7
    | head (string2list s) == "eight"   = 8
    | head (string2list s) == "nine"    = 9
    | otherwise                         = error "not match"

在 no.txt 中:

one
two
three
four
....

编译运行代码后,得到结果:

1

但我希望得到:

1
2
3
4
...

代码有什么问题?有什么帮助吗?谢谢!

最佳答案

readFile 读取时,

str 不是字符串列表(它只是一个类似于 one\ntwo 的字符串)。做

main = do
    str <- readFile "no.txt"
    mapM_ (\x -> putStrLn (show(english x))) $ lines str

在您的 main 中使用 linesstr 转换为列表(参见 lines 的文档)。

关于Haskell - 打印数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7813120/

相关文章:

c# - 自动将 PDF 打印到特定打印机和纸盘

c# - 如何在 C# 中克隆图形?

printing - 为 Julia 中的新类型定义类似 print() 的函数

c - 使用 While 循环打印模式并且仅使用 C 中的三个输出语句

haskell - 如何从 GHC 为 Snow Leopard 获取 64 位二进制文​​件?

haskell - 什么是 Cabal 组件以及如何使用它们?

haskell - Haskell 中的 do-blocks 中简洁的 if-then-else 表示法

.net - 为什么 PrintServer.GetPrintQueues 没有获得正确的 PrintTicket,而 PrintServer.GetPrintQueue 却获得了正确的 PrintTicket?

haskell - GHC/Haskell 平台安装的任何地方

list - Haskell - 检查所有列表元素是否唯一