OCaml将整数列表中的每个数字三倍化

时间:2017-03-21 22:47:56

标签: list functional-programming ocaml

所以我需要编写一个函数,它将整数列表中的每个数字加倍

这是我到目前为止所做的:

let number =  [1; 2; 3; 4];;

let rec print_list_int myList = match myList with
| [] -> print_endline "This is the end of the int list!"
| head::body -> 
begin
print_int head * 3; 
print_endline "";
print_list_int body *3
end
;;

print_list_int number;; 

似乎没有做任何有用的事情,我出错的任何想法?需要它输出,但它也不这样做。提前致谢! :)

2 个答案:

答案 0 :(得分:4)

这个表达式:

print_int head * 3

的解释如下:

(print_int head) * 3

因为函数调用(应用程序)具有高优先级。你需要像这样括号:

print_int (head * 3)

下面的类似案例是另一个问题:(print_list_int body) * 3没有意义但print_list_int (body * 3)也没有意义。您不能将列表乘以3.但是,您不需要在此次调用中相乘。 print_list_int函数将(递归地)为您进行乘法运算。

<强>更新

如果我进行了上面提到的修改,我会在OCaml顶层看到这一点:

val print_list_int : int list -> unit = <fun>
# print_list_int number;;
3
6
9
12
This is the end of the int list!
- : unit = ()
#

答案 1 :(得分:1)

请注意,实现您尝试做的最优雅的方法是使用List.iter。它将给定函数(返回unit)应用于List的每个元素。

let print_triples = List.iter (fun x ->
  print_endline (string_of_int (3*x))
);;

val print_triples : int list -> unit = <fun>  

你走了:

# print_triples [1;2;3;4;5];;

3
6
9
12
15
- : unit = ()