我正在尝试对配对列表进行模式匹配,在这里尝试从配对列表中返回列表,但是我很难弄清楚在哪里进行递归调用。没有递归调用,我有这个:
let countriesInChart (cht: chart) =
match cht with
| [] -> []
| (x,y)::tt -> [x;y]
;;
但是自然地,这仅适用于列表中的第一对,并且只返回["countryA"; "countryB"]
而没有其余列表。
使用递归调用仅返回一个空列表:
let rec countriesInChart (cht: chart) =
match cht with
| [] -> []
| (x,y)::tt -> [x;y]::countriesInChart tt
;;
我将如何进行递归调用,以使列表中的所有配对都作为列表返回?
答案 0 :(得分:0)
你有这个:
[x;y] :: countriesInChart tt
这表示要将两个元素的新列表添加到列表列表的前面。
我不认为您想要一个列表列表,而只想要一个列表。因此,您不应该列出两个元素。
如果x和y是同一类型(我怀疑它们是同一类型),那么您可能想要的是:
x :: y :: countriesInChart tt
这表示将x
和y
分别添加到递归生成的列表的前面。
您也可以这样写,这是完全等效的:
[x; y] @ countriesInChart tt
但是,这将构造两个元素的列表,只是将其丢弃。因此,这只是一点点额外的工作,无济于事。