OCaml:表示整数列表的简单赋值
OCaml: simple assignment to represent a list of ints
您好,我正在学习 OCaml 语言并正在做作业。
无限精度自然数可以表示为 0 到 9 之间的整数列表
编写一个函数,接受一个整数并用 0 到 9 之间的整数列表表示它,其中头部
列表的 包含最低有效数字,列表的最后一个元素代表最高有效数字。
如果输入为负 return None。我们为您提供了一些用例:
例如:
toDec 1234 = Some [4; 3; 2; 1]
toDec 0 = Some []
toDec -1234 = None
我已经为它写了下面的代码。
let rec toDec i =
(
if i < 10 then i::[]
else toDec ((i mod 10)::acc) (i/10) in toDec [] i;
);;
我在第 4 行遇到语法错误。由于我是这门语言的新手,所以无法弄清楚哪里出了问题。有人可以帮忙吗。
in
关键字必须与 let
一起使用。您可以使用局部函数 aux
,如下所示:
let toDec i =
let rec aux acc i =
if i < 10 then i::[]
else aux ((i mod 10)::acc) (i/10)
in
aux [] i
这不是你想要的,但语法和类型是有效的,我相信你可以修复其余部分。
Vicky,你忘记定义 acc
也忘记放置 else if
语句。
按如下方式更新您的代码,
let rec toDec ?acc:(acc=[]) i =
if i < 0 then None
else if i = 0 then Some acc
else toDec ~acc:((i mod 10)::acc) (i / 10)
您好,我正在学习 OCaml 语言并正在做作业。
无限精度自然数可以表示为 0 到 9 之间的整数列表
编写一个函数,接受一个整数并用 0 到 9 之间的整数列表表示它,其中头部 列表的 包含最低有效数字,列表的最后一个元素代表最高有效数字。 如果输入为负 return None。我们为您提供了一些用例:
例如:
toDec 1234 = Some [4; 3; 2; 1]
toDec 0 = Some []
toDec -1234 = None
我已经为它写了下面的代码。
let rec toDec i =
(
if i < 10 then i::[]
else toDec ((i mod 10)::acc) (i/10) in toDec [] i;
);;
我在第 4 行遇到语法错误。由于我是这门语言的新手,所以无法弄清楚哪里出了问题。有人可以帮忙吗。
in
关键字必须与 let
一起使用。您可以使用局部函数 aux
,如下所示:
let toDec i =
let rec aux acc i =
if i < 10 then i::[]
else aux ((i mod 10)::acc) (i/10)
in
aux [] i
这不是你想要的,但语法和类型是有效的,我相信你可以修复其余部分。
Vicky,你忘记定义 acc
也忘记放置 else if
语句。
按如下方式更新您的代码,
let rec toDec ?acc:(acc=[]) i =
if i < 0 then None
else if i = 0 then Some acc
else toDec ~acc:((i mod 10)::acc) (i / 10)