OCaml涉及列表的错误

时间:2013-04-23 02:03:51

标签: 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

我一直在研究它,但是对此问题的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:2)

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

如果您不想使用List.map(Dave Newman建议再次使用),您至少可以考虑只为列表中的每个元素调用一次lastE而不是一次。这对于长名单会有很大的不同。