这里的语法错误究竟是什么?

时间:2015-02-23 06:53:48

标签: ocaml

我试图编写一个能够返回列表中第二个最小数字的函数。我一直收到语法错误,但我无法确定问题所在。我可以请你帮忙吗?

已删除的代码

1 个答案:

答案 0 :(得分:1)

您忘记使用let关闭本地 in绑定。正确的(和缩进的)代码应该是:

let second_smallest_helper1 lst=
  let second_smallest_helper2 currentMinimum currentNumber =
    if currentMinimum < currentNumber then currentMinimum else currentNumber
  in List.fold_left second_smallest_helper2 (List.hd lst) lst
;;

let delete (x, mylist) = List.filter (fun y -> y != x) mylist;;

let second_smallest myList = 
  let x = second_smallest_helper1 myList in
  let newList = delete (x,myList) in
  second_smallest_helper1 newList
;;

顶级let绑定的格式为

let <pattern> = <expression>;; (* ;; is optional, but beginners should have it *)

但是本地let绑定的格式为

let <pattern> = <expression> in <expression>

您绝对需要为编辑器使用适当的OCaml缩进工具,以避免此类错误。

还有一件事。我不确定您对!=的使用是否正常。这是物理指针比较。可能你想使用结构比较<>

  

由于“个人原因”,OP试图编辑并删除所有答案。我自己跳过编辑批准并将其留给社区,显然拒绝了它。有关此类事情的Meta SO讨论可在What to do when an OP asks to delete my code from my answer?找到,包括OP应该做什么。