此表达式的类型为 'a 列表,但表达式应为 'b * 'c 类型

This expression has type 'a list but an expression was expected of type 'b * 'c

我不明白为什么会收到此错误消息,很高兴能得到启发

let write c v d =
  let rec new_dict=function 
    | []->(k, v)
    | (key,value)::q-> if key=k
                        then new_dict (q) 
                        else (key,value)::new_dict (q)
  in new_dict (d) ;;

这里我的目标是创建一个新字典,其中键 'c' 将获得一个新值,或者如果该键最初不在字典中则添加该键。

抱歉,如果我的错误有点明显,我是 OcamL 的新手。

谢谢。

我们只考虑 new_dict,并进行一些格式清理。

let rec new_dict = 
  function 
  | [] -> (k, v)
  | (key, value)::q -> 
    if key = k then 
      new_dict q
    else 
      (key, value) :: new_dict q

如果列表为空,它returns 是一个元组。否则它 returns 一个列表。注意 :: 列表构造函数。

也许你的意思是:

let rec new_dict = 
  function 
  | [] -> [(k, v)]
  | (key, value)::q -> 
    if key = k then 
      new_dict q
    else 
      (key, value) :: new_dict q