[英]Ocaml function to convert a tuple into a list
我有一个(int *字符串)元组,我想将其隐藏到列表中。 该元组的形式为(N,E),其中N是元素E的出现次数。该函数应返回一个列表,其中包含E的N个出现。 示例如下。 假设此函数称为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 ; 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 []
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.