Оператор:: 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]

Другие вопросы по тегам