gpt4 book ai didi

F#:尝试从函数返回结果时出现类型不匹配错误

转载 作者:行者123 更新时间:2023-12-02 00:58:24 25 4
gpt4 key购买 nike

所以我有这个函数来计算给定字符串中每个字母的频率百分比。这个函数称为“频率”并利用了我编写的其他辅助函数(“计数”、“小写”和“百分比”)。但是当我尝试返回结果时,我不断收到不匹配错误。下面是我的代码:

let frequency(str:string) : float  = 
let myList = ['a'..'z']
for i=0 to 25 do
printf "%f" (percent ((count myList.[i] str) (lowerCases str)))

System.Console.WriteLine(frequency"hello world")

我一直收到这个错误:

This expression was expected to have type float but here has type unit

如何修复此类型不匹配错误?我已经尝试将我的结果设置为不同的变量并调用该变量,但这没有用。

最佳答案

您已将函数声明为返回一个 float :

let frequency(str:string) : float  = 

但是,您的函数不返回 float ,它只是打印出一个 float :

printf "%f" (percent ((count myList.[i] str) (lowerCases str)))

printf 函数返回 unit,这意味着它实际上没有返回值(它有一个单例类型的常量返回值 unit ).

我认为您需要在此处解决两件事。你需要从函数返回一个值(通过让它成为最后一行的值),我想你会希望你的返回类型是一个列表或一个映射而不是单个值(否则,你怎么知道两个频率适用的字母)?

您只需从 List.map 调用您的 percent 函数,然后制作列表的 Map 即可实现此结果:

let frequency(str:string) : Map<char, float>  = 
['a'..'z']
|> List.map (fun letter -> letter, (percent ((count letter str) (lowerCases str))))
|> Map.ofList

关于F#:尝试从函数返回结果时出现类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52542329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com