Совпадение сопоставляется только с фиксированными образцами, а не с переменными. Соответствующее использование сопоставления в этом случае будет выглядеть так: (обратите внимание на включение «по умолчанию», как и в другом ответе)
let list = [ "a", 1; "b", 2; "c", 3; "d", 4 ]
let rec map_left_to_right e rules default = match rules with
[] -> default (* No rules left to match *)
| (first,second)::rest -> (* At least one rule remaining, which we'll put into first,second *)
if first = e
then second
else map_left_to_right e rest default
Если мы хотим вернуть 0, если ничего не найдено, то это будет выглядеть так:
map_left_to_right "b" list 0
Все это функционально эквивалентно коду в другом ответе, и на практике я бы рекомендовал использовать этот код, поскольку он меньше и лучше использует существующие библиотеки, но я подумал, что я дам этот код, потому что он лучше иллюстрирует как на самом деле будет применяться сопоставление с образцом в этом случае.