繁体   English   中英

如何在OCaml中将列表打印为int?

[英]How to print list as int in OCaml?

举例来说,我有任何清单

let lista = [1;2;3;4;5;6]

我怎么写成

int = 123456

这样我以后才能将其传递给函数?

我试过了

  let rec print lista =
  match lista with
  []->()
  |a::lista ->print_int a; print lista;;

但我没有得到预期的结果

 - : unit = ()

我知道int_of_string,所以我的函数返回string还是int并不重要。

可能的解决方案:

lista 
|> List.fold_left (fun a x -> a * 10 + x) 0;;

累加器乘以10,然后将列表的当前元素相加

第二个参数,用于将累加器初始化为0。

List.fold_left对于处理列表非常有用。

如果需要打印结果,请修改代码,并添加以下行以直接打印结果:

lista 
|> List.fold_left (fun a x -> a * 10 + x) 0
|> print_int;;

您已经很接近解决方案了:您应该为每个数字生成一个字符串并将其附加在一起,而不是将解决方案print到标准输出中。 这是您需要的功能:

val string_of_int : int -> string

val(^):字符串->字符串->字符串

或者,您可以通过注意以下内容来绕过int_of_string并实现直接解决方案:

to_int [a; b; ...; c; d] = ab...cd
                         = d + 10 * (c + 10 * (... + 10 * (b + 10 * c)))

即,它具有简洁的递归结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM