【发布时间】:2019-12-01 21:04:36
【问题描述】:
*我编辑了我的原始帖子以包含更多信息。
我正在处理 F# 分配,我应该创建一个函数,该函数将“任何列表列表”作为输入并输出“任何列表”。它应该能够将列表列表连接成一个列表。
这是我的函数的样子:
let llst = [ [1] ; [2;3] ; ['d';'e';'f'] ]
let concat (llst:'a list list) : 'a list =
List.concat llst
List.iter (fun elem -> printf "%d " elem) concat
这个解决方案或多或少直接复制自微软使用 List.concat 函数的示例,唯一的例外是输入/输出类型的规范。
当我运行代码时,我得到这个错误:
concat.fsx(7,43): error FS0001: This expression was expected to have type
''a list'
but here has type
''b list list -> 'b list'
所以看来 concat 正在将我的 llst 变成一个字符列表,我不明白。
谁能帮我理解为什么会出现这种类型错误以及如何编写一个函数来获取我需要的类型?
【问题讨论】:
-
添加
concat的定义和调用concat的代码。到目前为止,您提供的代码不包括问题。 -
您可能正在尝试重新实现
List.collect,您可能需要先检查一下。试试let results = List.collect id myListOfLists -
我添加了更多代码,@Mankarse。
-
消息说
List.iter的第二个参数应该是一个列表。concat不是列表。
标签: f#