обрезка списка пар с помощью OCaml - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь отфильтровать список пар и вернуть новый список, содержащий только первый элемент каждой пары. Ввод / вывод должен go примерно так:

input = [('A', 3); ('B', 2); ('D', 1)]

output = ['A'; 'B'; 'D']

Код, который у меня есть, следующий:

let rec trimList l = function
| [] -> []
| head::tail -> let l' = [fst head] @ trimList List.tl l;;

, но я получаю следующую ошибку:

Line 3, characters 59-61:
3 |     | head::tail -> let l' = [fst (head)] @ trimList List.tl l;;
                                                           ^^
Error: Syntax error

Я не знаю, почему это не работает. Я знаю, что это очень просто, но я новичок в OCaml. Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 06 февраля 2020

Ваша проблема с синтаксисом вызвана тем, что у вас есть let без соответствующего in.

Выражение let выглядит следующим образом:

let v = expr1 in expr2

По сути, это устанавливает локальная переменная v со значением expr1 и значением expr2 (которая, вероятно, будет содержать экземпляры переменной v).

Вам не хватает части in элемента let выражение.

В качестве другого комментария, если вы определите функцию, подобную этой:

let f l = function ...

Вы определяете функцию из двух параметров. Существует неявный параметр, определенный ключевым словом function; параметр сопоставляется со следующими шаблонами.

Скорее всего, вы хотите удалить l из определения вашей функции.

Есть несколько других проблем с вашим кодом, но я надеюсь, что это помогает добиться прогресса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...