OCaml涉及列表的错误

我仍然是OCaml的新手,并希望在优化代码方面提供一些帮助.

我试图将列表的最后一个元素乘以给定列表的每个元素.

这是我的代码片段:

(* Find the last element of a function *)
let rec lastE = function
| [] -> []
| [x] -> x
| _ :: t -> lastE t;;

(*multiply a list by the last element*)
let rec lmul list =
match list with
[] -> []
| hd::tl -> (hd *. (lastE tl)) :: lmul tl;;

当我运行代码时,我收到此错误消息:

Error: This expression has type float list but 
an expression was expected of type 'a list list

我已经研究了一段时间了,但是对这个问题的任何帮助都会非常感激.

最佳答案 要改写Dave Newman告诉你的不同,你的基本问题是lastE需要以不同方式处理空列表.如果lastE应该返回一个数字,它必须在所有情况下都返回一个数字.就目前而言,lastE在收到空列表时返回一个列表.

如果你不想使用List.map(再次像Dave Newman建议的那样),你至少可以考虑只为列表中的每个元素调用lastE而不是一次.这将对长列表产生重大影响.

点赞