ocaml - OCaml中列表上的相互递归的语法错误
问题描述
我正在使用 OCaml v 4.00.1。我正在尝试使用相互递归编写一个函数来获取一个列表并返回一个 int。int 是取列表的交替元素并将它们彼此相加和相减的结果。例如,列表 [1;2;3;4] 将导致 1 + 2 - 3 + 4 = 4。
我的代码如下:
let alt list =
let rec add xs = match xs with
[] -> 0
| x::xs -> x + (sub xs)
and sub xs = match xs with
[] -> 0
| x::xs -> x - (add xs);;
OCaml 在 ;; 上引发语法错误 在代码的最后。我不确定从哪里开始弄清楚这个错误实际上是什么。
解决方案
我怀疑您忘记添加绑定in ...
的一部分- 更改为粗体let
let alt list =
let rec add xs =
match xs with
| [] -> 0
| x::xs -> x + (sub xs)
and sub xs =
match xs with
| [] -> 0
| x::xs -> x - (add xs)
in
add list
这将以 开始序列+
,即 1 + 2 - 3 ...
如果你想让它开始-
...
...
in
sub list
我们可以在这里交换match
语法function
并提高可读性
let alt list =
let rec add = function
| [] -> 0
| x::xs -> x + (sub xs)
and sub = function
| [] -> 0
| x::xs -> x - (add xs)
in
add list
推荐阅读
- docker - 在 Windows 上,“docker network create”出现错误“hnsCall 在 Win32 中失败:系统找不到指定的文件”
- python - Tkinter 页面未加载
- alexa-skills-kit - 有谁知道如何在不离开播放屏幕的情况下暂停亚马逊 Alexa 音频播放器?
- python-3.x - 如何在 discord.py 库中设置多个前缀或使前缀不区分大小写?
- tensorflow - tf.TensorArray 允许从未写入的索引中读取?
- bitbucket - Bitbucket Pipelines - 构建不输出构建文件?
- css - 如何在嵌套元素中使用 flexbox 自动边距?
- vue.js - Vue.js 切换类失败
- ios - 提示iOS用户选择要由应用处理的JPEG
- elasticsearch - ElasticSearch 6.7 document creation time