我是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中管理的,因此编译器不会考虑仅将一个参数应用于期望多个错误的函数。因此,它仅抱怨第一个参数的类型不匹配。

10-05 18:30