2015-02-23 4 views
-1

Я пытаюсь написать функцию, которая вернет второе наименьшее число в списке. Я продолжаю получать синтаксическую ошибку, но я не могу точно определить, в чем проблема. Могу ли я получить помощь по этому поводу?Что такое синтаксическая ошибка здесь?

Исключен код

+0

Я до сих пор не вижу точно, что не так с тем, что я написал. Не могли бы вы назвать это для меня? – user3567081

+0

Не удаляйте важную часть вопроса. – camlspotter

ответ

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 для вашего редактора, чтобы избежать подобных ошибок.

Еще одна вещь. Я не уверен, что ваше использование != в порядке. Это физическое сравнение указателей. Возможно, вы хотите использовать <>, структурное сравнение.

ОП попытался отредактировать и удалить весь ответ из-за «личных причин». Я сам пропустил разрешение на редактирование и оставил его сообществу, которое, очевидно, отклонило его. Обсуждение Meta SO об этом можно найти по адресу What to do when an OP asks to delete my code from my answer?, включая то, что должен делать OP.

+0

Я соглашаюсь на физическое/структурное сравнение. Физическое сравнение не должно использоваться новичками. – PatJ

Смежные вопросы