我是OCaml的新手,我想编写一个函数,该函数返回z以下3和5的所有倍数的和。
这是我所做的:
let rec problemone x y z = match x with
| x when x > z -> y
| x when x mod 3 = 0 && x mod 5 = 0 -> problemone(x+1,y+x,z)
| x when x mod 3 = 0 && x mod 5 <> 0 -> problemone(x+1,y+x,z)
| x when x mod 3 <> 0 && x mod 5 = 0 -> problemone(x+1,y+x,z)
;;
不幸的是,它不起作用,它告诉我:
Error: This expression has type 'a * 'b * 'c
but an expression was expected of type int
最佳答案
OCaml中函数应用程序的语法为problemone (x+1) (y+x) z
,而不是problemone(x+1,y+x,z)
。(x+1,y+x,z)
被解释为元组,这就是为什么错误引用元组类型'a * 'b * 'c
的原因。将元组作为第一个参数传递,该参数应为int
。而且由于函数是在OCaml中管理的,因此编译器不会考虑仅将一个参数应用于期望多个错误的函数。因此,它仅抱怨第一个参数的类型不匹配。