使用倍清单的要求,对价值的回报指数我写了指数的递归版本如下OCaml中
let index list value =
let rec counter num = function
| [] -> -1
| h::t ->
if h == value
then num
else (counter (num + 1)) t
in counter 0 list;;
它的工作原理,但随后我们的教授说,我们应该用一个尾递归版本为了不在服务器上超时,所以我使用fold编写了一个新的索引函数,但我似乎无法弄清楚为什么如果它找不到该元素,它将返回一个大于列表长度的数字,甚至尽管我希望它返回-1。
let index2 list value = fold (fun i v ->
if i > (length list) then -1
else if v == value then i
else i+1) 0 list;;
这里是我的版本倍,以及:
let rec fold f a l = match l with
[] -> a
| (h::t) -> fold f (f a h) t;;
'=='是物理上的平等(这对于整数很好),但是你可能有''''的意思。 – nlucaroni
你的'index'实现是尾递归的。 –