以下函数试图匹配一个(int * stmt list) list (其中stmt只是在其他地方定义的类型)并返回一个stmt list

 let rec findinlist (r: int) (l1: (int * stmt list) list ) (l2: stmt list) =   
      (match l1 with 
      | [] -> l2
      | h:: _ when h= (r,s) -> s
      | _ :: t -> findinlist r t l2
      )    

首先,这给了我一个无限值的错误,但是我将如何去实现呢?

===============>>#1 票数:2 已采纳

当您使用的when ,不是另一个将s绑定s模式匹配。 这只是一个布尔测试,需要一个布尔值(如if语句)。

也许您想要类似的东西:

let rec findinlist (r: int) (l1: (int * stmt list) list ) (l2: stmt list) =   
  (match l1 with 
  | [] -> l2
  | (r',s):: _ when r' = r -> s
  | _ :: t -> findinlist r t l2
  ) 

  ask by Zee translate from so

未解决问题?本站智能推荐:

2回复

迷彩图案匹配

大家好,我是OCaml和模式匹配的新手,所以我很难解决这个问题。 假设我有一个元组列表。 我想要做的是根据元组中的第一个元素将参数与元组之一匹配,然后,我要返回元组的第二个元素。 例如,我想做这样的事情: 如果我使用map_left_to_right“ b”列表,我想获得2作为
1回复

迷彩图案匹配用户定义类型

我正在尝试根据调用函数baz的结果编写一个可以返回int或字符串的函数。 但是,我在编译时收到此错误消息: 我到底在做什么错? 编辑:这是我正在处理的代码的实际片段: 这里的最终目标是一个类型推理引擎,因此我可以告诉infer_type一个表达式,该表达式将传递给i
3回复

迷彩功能

我试图做一个函数,返回列表中前k个元素的值。 这是行不通的。 我不知道为什么。 有人可以帮忙吗? 这是tl函数- 这是真正的汇整功能-
1回复

迷彩树功能

我有一棵包含两个元素的树。 由以下数据结构定义: 现在,我必须编写一个函数split:('a,'b)tree->'a sheet *'b列表,该列表将覆盖第一个列表中的所有元素节点a和第二个列表中的所有元素节点b。
1回复

迷彩匹配模式组合

我已经为此苦苦挣扎了一段时间。 我有一个匹配模式,可能是一个组合。 例如下面的代码: 这可能是因为In和Out发生在一个实例。 有什么办法可以说吗
1回复

迷彩这个'('可能不匹配

Ocaml的新手。 我不知道这里发生了什么,我已经尝试解决了大约2个小时。 这是代码: 当我尝试编译时说:
3回复

迷彩人物

在红宝石中,我可以执行以下操作: 如何用ocaml打印这些字符? 在Utop中,我得到:
1回复

迷彩递归

交叉点[1; 2; 2; 3; 4; 4; 3] [2; 3] = [2; 2; 3; 3] 我的代码有问题,因为它当前返回[2; 2],因为它与t2不匹配,仅与h2匹配,是否有人对我应该改变的方向有任何建议?
1回复

迷彩最长子串

我有些运动有问题。 我必须找到最长的子字符串。 例: 我必须将其转换为List并查找/搜索最长的子字符串并打印结果CCCC 我的功能必须类似于该function search : char list -> unit 而且我不能使用Module Str 。
1回复

迷彩线误解

我仅在5秒钟的延迟后才能看到整个输出,但我认为应该是这样。 我期望以下输出: 主要在这里 您好收到 ( 然后才睡5秒钟 ) 但是我的代码首先要休眠5秒钟,然后才继续。 我很乐意在线阅读一些教程,但没有找到任何教程。