【问题标题】:Haskell - Trouble with Parsing to DoubleHaskell - 解析成双倍的麻烦
【发布时间】:2017-08-31 01:34:23
【问题描述】:

我希望你做得很好。

我昨天开始做一些 Haskell,今天我被困在一个函数上,我想计算每个单词的长度的平均值。我遇到的问题是 medellangd 总是被评估为 0.0,无论如何。无论给出什么输入,变量 spaces 和变量 listLength 都始终为 0.0。

medellangd :: String -> Double
spaces = fromIntegral (raknaBokstaver [] ' ')
listLength = fromIntegral (length [])

medellangd [] = 0.0
medellangd _ = (listLength-spaces) / (spaces + 1)

我在终端中测试了函数 raknaBokstaver :: String -> Char -> Int,它工作得很好。 length 函数也可以正常工作。

我错过了 fromIntegral 功能吗?为什么 spaceslistLength 都被评估为 0.0?

提前致谢。

【问题讨论】:

  • 嗯,空格被声明为常量fromIntegral (raknaBokstaver [] ' '),它根本不依赖于任何输入。此外,根据定义,medellangd 检查输入列表是否为空,并返回常量 0.0,否则它丢弃输入列表(_ 所做的)并返回另一个常量。我猜你想要medellangd xs = ... 以某种方式使用输入列表xs
  • 你好。好的,我现在一切正常,非常感谢您的回复。
  • 顺便说一句,你可以使用 åäö,除非你的编辑器已经过时了。

标签: haskell


【解决方案1】:

你会想要类似的东西(我试图让它接近你当前的解决方案):

medellangd :: String -> Double
medellangd [] = 0.0
medellangd xs = (listLength - spaces) / (spaces + 1) where
  spaces = fromIntegral (raknaBokstaver xs) 
  listLength = fromIntegral (length xs)

【讨论】:

  • 非常感谢。我在本周末早些时候遇到了这个 where 关键字及其含义,但我会更多地使用它。感谢您的回复,它确实对我有帮助。
猜你喜欢
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2011-03-11
相关资源
最近更新 更多