-5

我正在学习 OCaml,我给自己的练习问题之一是在创建的列表中找到元素的索引。到目前为止,我以为我拥有它,但我已经重写这个代码块很长时间了,似乎无法理解为什么返回值不正确。

let rec indexer_helper list element index pos found= 
match l with 
        []      ->  if (found = false) then
                        (-1)
                    else
                        index

    |   (h::t)  ->  if (h = e) then
                        index = pos
                        pos = pos + 1
                        indexer_helper t element index pos true
                    else
                        pos = pos + 1
                        indexer_helper t element index pos found;;

let rec indexer list element = indexer_helper list element 0 0 false;;

编辑:问题解决了。问题是我在“更改”不可变变量时忘记使用 let 语句。

4

1 回答 1

3

你在这里使用你的命令式反应有点太多了。这些 OCaml 行:

index = pos
pos = pos + 1

正在计算布尔值,而不是为变量赋值。您不能在 OCaml 中为变量(本身)赋值。变量是不可变的。在 OCaml 中编写这些行的惯用方式类似于:

let index' = pos in
let pos' = pos + 1 in
index_helper t element index' pos' true

这里还有其他错误,但这让我觉得首先要弄清楚。

于 2013-03-23T18:15:59.420 回答