【发布时间】:2018-05-02 00:29:05
【问题描述】:
同时匹配下面的数据
let atable = ("Student", [("Id", ["2";"4";"7";"9"]);
("Name", ["Jim";"Linnea";"Steve";"Hannah"]);
("Gender",["Male";"Female";"Male";"Female"]);
("Course",["Geography";"Economics";"Informatics";"Geography"])
]);;
这种模式
let rec printTable aTable = match aTable with
( )->""
| (title,[data]) -> "\n"^title^"\n\n"^printTable(data)
| [(col,cont)::t] -> col^" "^printTable([t])
我收到一条错误消息,告诉我代码正在尝试匹配 'a * 'b 类型的值,但模式期望匹配 unit 类型的值。这里有什么问题?
【问题讨论】:
-
我认为这是the XY problem 的情况。为什么你的学生首先由一个字符串的元组和一个表示键和值的元组数组来表示?使用更合适的数据结构而不是解决模式匹配问题可能会更好。
-
我倾向于同意 RichouHunter 的观点。我宁愿看到: type student = {id: string;名称:字符串;性别:字符串;课程:字符串};;作为基本类型,并且 atable 将只是一个 student 列表。但这取决于您想要实现的目标。
-
@PierreG.这只是表格的一个例子。我的任务是创建一个通用表数据类型,并使用模式匹配和递归在其上实现 3 个函数。