首页 > 解决方案 > 表达式类型错误

问题描述

这个问题与这个SE question密切相关。MyMap已以StringMap与该问题相同的方式创建。

# lsc;;
- : (MyMap.key * testtype) list =
[(("", "Test1"),
  {name = ""; state = ""; region = "Test1a"});
(("", "Test1a"),
  {name = ""; state = ""; region = "Test1b"});
(("", "Test2"),
  {name = ""; state = ""; region = "Test2"})]

我想创建一个函数,它会给我一个过滤列表lsc。我想根据(x, _) _. 例如等于Test1,则函数将返回记录列表

[{name = ""; state = ""; region = "Test1a"}; {name = ""; state = ""; region = "Test1b"}]

目前,我只想过滤lsc得到

[(("", "Test1"),
  {name = ""; state = ""; region = "Test1a"});
(("", "Test1a"),
  {name = ""; state = ""; region = "Test1b"})]

MyMap.filter (fun (x,_) _ -> x="Test1") lsc;;给我以下错误:

Error: This expression has type (MyMap.key * testtype) list
       but an expression was expected of type
         'a MyMap.t = 'a Map.Make(PaireCles).t

SE question开始,我认为这是要走的路,但我总是面临同样的错误。有解决方法吗?

标签: filterocamlrecord

解决方案


Map.filter函数接受一个函数和一个地图数据结构,而不是您拥有的关联列表。您可以使用List.filter过滤键*值对列表,

List.filter (fun (x,_) -> x = "Test1") lsc

推荐阅读