gpt4 book ai didi

list - 将元组转换为列表的 Ocaml 函数

转载 作者:行者123 更新时间:2023-12-02 08:49:49 24 4
gpt4 key购买 nike

我有一个 (int * string) 元组,我想将其转换为列表。元组的形式为 (N, E),其中 N 是元素 E 出现的次数。该函数应返回一个列表,其中包含 N 次出现的 E。示例如下。让我们假设这个函数叫做 tuple_decode。

tuple_decode (1, "A") -> ["A"]
tuple_decode (2,"B") -> ["B";"B"]
tuple_decode (4,"C") - > ["C";"C";"C";"C"]

tuple_decode函数如下

let tuple_decode acc (n,elem)   = 
let add_one_elem i =
match i with
0 -> acc
| i -> elem :: acc ; add_one_elem (i-1) (* Line 184 *)
in
add_one_elem n
;;

当我尝试编译此函数时,出现以下错误。

File "all_code.ml", line 184, characters 11-22:
Warning 10: this expression should have type unit.
File "all_code.ml", line 184, characters 25-37:
Error: Unbound value add_one_elem

谁能帮我弄清楚为什么会出现此错误和警告。

问候普尼特

最佳答案

警告来自使用 ; 的序列组合。当你写 S1 ; S2,编译器期望 S1 具有 unit 类型。但此处 S1 返回一个列表 (elem::acc) ,其值将被丢弃。此外,由于您没有将 acc 作为参数传递,因此它的值在所有递归调用后都不会改变。

错误是由于 add_one_elem 的递归使用。因为你没有使用 rec 关键字,当 add_one_elem (i-1) 被调用时,OCaml 不知道 add_one_elem 被递归定义.

此外,acc应该是add_one_elem的一个参数,用于累加结果:

let tuple_decode (n, elem) = 
let rec add_one_elem i acc =
match i with
| 0 -> acc
| i -> add_one_elem (i-1) (elem::acc)
in add_one_elem n []

关于list - 将元组转换为列表的 Ocaml 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9247566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com