Оператор:: OCaml
Я новичок в OCaml и пытаюсь создать парсер, я хочу иметь список, в котором хранятся все методы моего класса. Это одна часть, которая у меня есть в моем файле.mly.
init_method_list:
{ [] }
| method_list method_decl { List.rev($1) }
;
method_list:
method_decl { [ $1 ] }
| method_list method_decl { $2 :: $1 }
;
Кто-нибудь может объяснить, что именно здесь происходит? Особенно:: операция. Погуглил, но не смог найти оператора в документах.
Я получаю, что список может быть пустым, или мы делаем правильные рекурсивные вызовы, чтобы заполнить его всеми методами в классе. method_decl
просто ищет совпадения определенных комбинаций токенов, которые представляют метод.
2 ответа
Как я уже сказал в своем комментарии, оператор ::
используется для объединения элементов типа 'a
к списку типов 'a list
, Небольшой пример:
1 :: [2;3]
производит список [1;2;3]
так что да, он добавляет элемент в начало списка.
Как и все остальные,:: объединяет элемент в список того же типа. Кроме того, если вам нужно объединить два списка, вы можете использовать символ @, например:
[1; 2; 3] @ [4] выдаст список [1;2;3;4]