放大镜中的ocaml初始化列表

问题描述 投票:0回答:1

我是Ocaml的初学者。我想跳过列表的第一个元素。

这是我的清单:令l = [1; 2; 3; 4; 5; 6; 7; 2; 1] ;;

我想在我的FOR中使用它:

let l = List.tl l;

这是我的完整代码

let l = [1;2;3;4;5;6;7;2;1];;
let n = 1;;
let counter = ref 0;;
for i = 0 to (List.length l) do
if List.hd l = n then counter := !counter + 1;
print_int(!counter);
print_string("\n");
let l = List.tl l
done;;

但是我在DONE中有错误,它说语法错误。

有人可以帮助我吗?请

提前感谢

ocaml ocamlbuild ocamllex ocamlyacc ocamlfind
1个回答
0
投票

您的问题是let始终需要匹配的in。完整的表达式如下所示:

let var = expr1 in expr2

由于缺少in部分,因此出现语法错误。

但是,更深层的问题是您试图修改l的值。您定义l的方式是不可变的。您无法更改其值。如果要更改其值,可以将其定义为参考,就像对counter所做的那样。

(模块的顶层使用let的另一种形式。该形式没有匹配的in。但是您的代码没有定义顶层名称,因此这无关。)

© www.soinside.com 2019 - 2024. All rights reserved.