我试图编写一个能够返回列表中第二个最小数字的函数。我一直收到语法错误,但我无法确定问题所在。我可以请你帮忙吗?
已删除的代码
答案 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应该做什么。