所以我需要编写一个函数,它将整数列表中的每个数字加倍
这是我到目前为止所做的:
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;;
似乎没有做任何有用的事情,我出错的任何想法?需要它输出,但它也不这样做。提前致谢! :)
答案 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 = ()