我是haskell的新手,我有疑问:我写代码:
word_list = ["list", "lol", "wordword"]
check str = if head str == 'l' then tail str else str
average wl = (length $ concat $ map check wl) `div` length wl
Run Code Online (Sandbox Code Playgroud)
此代码必须删除单词列表中每个单词中的第一个"l"符号,单词收到的单词,获取结果字符串的长度和单词计数的div.
所以在这段代码中我必须接受:13/3 = 4,333 ...("listlolwordword"= 15,"istolwordword"= 13)但我只收到4.
average :: [[Char]] -> Float
不工作,我收到错误.我的错误在哪里?PS.对不起我的英文,拜托
C. *_*ann 12
该length
函数返回一个Int
,和所述div
功能执行整数除法,换句话说,它丢弃的小数部分.如果你想要一个Float
结果,你需要先将结果转换length
为a Float
,然后(/)
用于除法:
word_list = ["list", "lol", "wordword"]
check str = if head str == 'l' then tail str else str
average wl = fromIntegral (length $ concat $ map check wl) / fromIntegral (length wl)
Run Code Online (Sandbox Code Playgroud)
虽然我在这里,你应该考虑使用模式匹配check
,例如:
check ('l':str) = str
check str = str
Run Code Online (Sandbox Code Playgroud)
这种风格更具可读性且不太可能出错 - 例如,如果给定空字符串,您的版本将失败.