List 使用fold检查OCAML列表中是否有单词
假设我想从6个字母的单词中提取一个4个字母的单词,从“谢谢”中说出“hank”。假设还有一个有意义的4个字母的单词列表,我想检查我刚才提取的4个字母的单词是否有意义(即,如果它出现在4个字母的单词列表中),然后我想返回一个所有6个字母的单词的列表,从中提取出有意义的4个字母的单词。 我的想法是:List 使用fold检查OCAML列表中是否有单词,list,ocaml,List,Ocaml,假设我想从6个字母的单词中提取一个4个字母的单词,从“谢谢”中说出“hank”。假设还有一个有意义的4个字母的单词列表,我想检查我刚才提取的4个字母的单词是否有意义(即,如果它出现在4个字母的单词列表中),然后我想返回一个所有6个字母的单词的列表,从中提取出有意义的4个字母的单词。 我的想法是: let is_4_init lst = let acc = ([]) in let f (group) x = let y =
let is_4_init lst =
let acc = ([]) in
let f (group) x =
let y = String.sub x 1 4 in
if List.mem y my_4words_list then ([x]) in
let (final_group) = List.fold_left f acc lst in final_group
错误:此变量表达式的类型应为unit
构造函数::不属于unit类型
为什么会这样
谢谢大家! 如果您使用
如果。。。然后
不带否则
,则结果的类型必须是单位
。这是因为两种情况下的类型必须相同unit
是值的类型()
,当表达式的结果不是特别有趣时使用
函数f应该返回一个累加的结果,所以它确实返回了一个有趣的结果。返回unit
不是您想要的。您需要弄清楚当测试为false时,f
应该返回什么
作为旁注,值得注意的是,您没有在任何地方使用名为
group
的参数。我不确定如何处理“else”的情况,因为如果这个4个字母的单词没有意义,我希望转到下一个单词,忽略最后一个单词。我知道我的变量组没有在任何地方使用。我可以用“u”吗?非常感谢。不,您需要使用组
。如果你知道如何使用group
,它将回答这两个问题。我想我现在明白了。如果我还有其他问题,我应该创建一个新主题吗?我的下一步是创建一个字符串对列表,其中包含上述所有的(4个字母,6个字母)对。我的策略是什么?