如何修改数据结构并在 OCaml 中返回它?

问题描述

在辅助函数中,我正在执行模式匹配以修改数据结构。我想修改数据结构,然后返回修改后的数据。在我的方法中,返回类型是 unit()。我需要它来返回修改后的 hash_table。

我试过了:

let helperfunction firstlist secondlist hash_table =  
    match(firstlist,secondlist) ->
        | (CUSTOMTYPE::tail,CUSTOMOBJA(a)::CUSTOMOBJB(b)::anotherTail) -> Hashtbl.add hash_table "key" (a+b); hash_table

还有,

let helperfunction firstlist secondlist hash_table =
 match(firstlist,secondlist) ->
     |(CUSTOMTYPE::tail,CUSTOMOBJA(a)::CUSTOMOBJB(b)::anotherTail) -> let aa = Hashtbl.add hash_table "key" (a+b); hash_table

它们都没有像我想要的那样运行。我需要的类似 Python 语言的功能是:

def helperfunction (HashMap hm,int ValuetoBeAdded):
     hm.add("key",ValuetoBeAdded)
     return hm

我对函数式编程很陌生。

解决方法

Hashtbl 是命令式(和可变的)数据结构,所以你不需要返回它,但如果你愿意,你可以。您的 Python 示例可以在 OCaml 中以如下方式进行翻译:

let helper_function hash_table value_to_be_added = 
  let () = Hashtbl.add hash_table "key" value_to_be_added in 
  hash_table

你的第二个例子很糟糕,但我在第一个例子中没有看到任何问题(除了模式匹配的非穷尽性)。