微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OCaml:表示整数列表的简单赋值

如何解决OCaml:表示整数列表的简单赋值

您好,我正在学习 OCaml 语言并正在处理一项作业。

无限精度自然数可以表示为 0 到 9 之间的整数列表

编写一个函数,它接受一个整数并用一个 0 到 9 之间的整数列表来表示它,其中头部 列表的最低有效数字和列表的最后一个元素代表最高有效数字。 如果输入为负,则返回 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。