Оператор :: 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 просто ищет совпадение определенных комбинаций токенов, представляющих метод.


person novalain    schedule 11.09.2015    source источник
comment
добавить $2 и $1?   -  person cchantep    schedule 11.09.2015
comment
В Ocaml оператор :: используется для объединения элемента типа 'a со списком типа 'a list.   -  person alifirat    schedule 11.09.2015
comment
хорошо, спасибо, он добавляет элемент в начало списка? @алифират   -  person novalain    schedule 11.09.2015
comment
Для чего ты гуглил? Я только что погуглил учебник по ocaml, и при первом попадании есть базовый учебник, в котором используется ::   -  person Edgar Aroutiounian    schedule 11.09.2015


Ответы (2)


Как я сказал в своем комментарии, оператор :: используется для объединения элемента типа 'a в список типа 'a list. Небольшой пример:

1 :: [2;3] создает список [1;2;3], так что да, он добавляет элемент в начало списка.

person alifirat    schedule 11.09.2015
comment
:: на самом деле не оператор, а скорее синтаксическая запись, поэтому ему разрешено появляться в соответствующих шаблонах, а операторам - нет. - person Michaël Le Barbier; 28.04.2016

Как все говорили, :: объединяет элемент в список того же типа. В качестве дополнительного дополнения, если вам нужно объединить два списка, вы можете использовать символ @, например:

[1;2;3]@[4] выдаст список [1;2;3;4]

person issharp    schedule 07.06.2016