Как я могу реализовать следующее сопоставление с образцом в OCaml? - PullRequest
0 голосов
/ 02 декабря 2018

В данном списке я хочу создать случай сопоставления с образцом, который выглядит следующим образом: a::b::c
a должен рассматриваться как отдельный элемент, а b должен рассматриваться как n элементов.c - это определенный тип.Кроме того, я хочу продолжать работать с a, b и c
Итак, есть ли способ создать шаблон, который построен как этот 1element::nelement::type

1 Ответ

0 голосов
/ 04 декабря 2018

Вы не можете.При сопоставлении шаблонов списков отсутствует «средний» элемент.

Следующий шаблон:

| "lorem" :: "ipsum" :: rest -> ...

будет соответствовать списку строк с не менее 2 соответствующими элементамисоответственно, "lorem" и "ipsum" и будет связывать rest с остальной частью списка.

Используя:

| "lorem" :: "ipsum" :: [] -> ...

, вы собираетесь сопоставить список с 2 элемента, исключительно , которые соответствуют "lorem" и "ipsum".

Если вы хотите использовать сопоставление с шаблоном на последнем элементе, вы можете сделать это с помощью

match List.rev list with
| last_element :: _ -> ...

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

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