我正在学习OCaml,这是我接触的第一种类型语言,希望您能耐心指导:
为了练习,我尝试定义一个名为“divides?”的函数,该函数输入两个整数并输出一个布尔值,描述“int a”是否可以被“int b”整除。在我的第一次尝试中,我写了类似以下的代码:
为了练习,我尝试定义一个名为“divides?”的函数,该函数输入两个整数并输出一个布尔值,描述“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;;
这并没有帮助太多:
在第26-27个字符处,用match a mod b进行匹配,
^
错误:该表达式的类型为'a option,
但是需要一个int类型的表达式
然后我尝试了这个:
let divides? (a : int) (b : int) =
match a mod b with
0 -> true
|x -> false;;
引发了以下错误: 字符14-15: let divides? (a : int) (b : int) = ^ 错误:此模式匹配的类型为int,但需要一个匹配'a option类型的模式。
对于类型系统我感到非常困惑和沮丧。(我的第一门语言是Scheme,这是我的第二门。)希望能得到帮助,解释我错在哪里,并提出修复建议,谢谢。