我正在学习 OCaml,这是我的第一种类型语言,所以请耐心等待:
为了练习,我试图定义一个函数“除法?” 它输入两个整数并输出一个布尔值,描述“int a”是否均匀划分为“int b”。在我的第一次尝试中,我写了这样的东西:
let divides? a b =
if a mod b = 0 then true
else false;;
这给出了类型错误:
if a mod b = 0 then true
^
Error: This expression has type 'a option
but an expression was expected of type int
所以然后我试图扭转它,我这样做了:
let divides? a b =
match a mod b with
0 -> true
|x -> false;;
这没有多大帮助:
Characters 26-27
match a mod b with
^
Error: This expression has type 'a option
but an expression was expected of type int
然后我尝试了这个:
let divides? (a : int) (b : int) =
match a mod b with
0 -> true
|x -> false;;
这引发了这一点:字符 14-15:让划分?(a : int) (b : int) = ^ 错误:此模式匹配 int 类型的值,但预期的模式匹配 'a 选项类型的值。
我现在对一般的类型系统感到非常困惑和沮丧。(我的第一语言是Scheme,这是我的第二语言。)任何解释我哪里出错的帮助以及如何解决它的建议都非常感谢。