从Haskell中的整数和浮点列表中提取值

时间:2018-04-10 18:42:35

标签: haskell

我有一个值列表:

2 0.75
1 0.01
2 1.0
3 0.8

我要查看列表,并希望将这些对分成两个变量。

为了进行测试,我刚尝试将它们打印出来。但是,这给了我一个错误“Prelude.read:no parse”:

getCountProb :: Handle -> IO ()
getCountProb inh = do
    countProb <- hGetLine inh
    let cp = read countProb :: (Integer, Float)
    let test = fst cp
    print test

1 个答案:

答案 0 :(得分:4)

countProb"2 0.75"read无法解析。您可以使用words将其拆分为两个可解析的段,但会在空格上拆分值。

let [x, y] = words countProb

然后您可以通过逐个阅读来合并到:: (Integer, Float)

let cp = (read x, read y) :: (Integer, Float)

或者,相当复杂,您可以使用Text.Printf.printf将文本格式化为read 可以解析的内容。

let [x, y] = words countProb
    fmtd   = printf "(%s, %s)" x y
    cp     = read fmtd :: (Integer, Float)